"host.docker.internal"과 동등한 리눅스란 무엇입니까?
맥과 윈도우에서는 사용이 가능합니다.host.docker.internal
(도커 18.03+) 용기 내부.
리눅스용으로 다양한 CLI 명령을 사용하여 env 변수를 전달하거나 추출하지 않고 즉시 해결할 수 있는 것이 있습니까?
당신이 무엇을 하려고 하는지에 달려있습니다.만약 당신이 함께 뛴다면,--net=host
,localhost
잘 될 겁니다기본 네트워킹을 사용하는 경우 정적 IP를 사용합니다.172.17.0.1
. 둘 다 그 도메인들과 완전히 같은 행동을 하지는 않을 것이라고 생각합니다.
리눅스 시스템의 경우, 주요 버전부터 시작할 수 있습니다.20.04
도커 엔진 – 또한 호스트와 다음을 통해 통신할 수 있습니다.host.docker.internal
. 이렇게 하면 자동으로 작동하지는 않지만 다음 실행 플래그를 제공해야 합니다.
--add-host=host.docker.internal:host-gateway
여기서 답변 보기: https://stackoverflow.com/a/61424570/3757139
도커 - compose 파일 - https://stackoverflow.com/a/67158212/243392 에 추가하려면 아래의 답변도 참조하십시오.
사용하시는 경우Docker Compose
+Linux
, (적어도 지금은) 수동으로 추가해야 합니다. 사용합니다.extra_hosts
너의 위에docker-compose.yaml
파일:
version: '3.7'
services:
fpm:
build:
context: .
extra_hosts:
- "host.docker.internal:host-gateway"
도커 v20.10+에서만 작동하므로 도커 업데이트를 잊지 마십시오.
출처 : https://github.com/docker/for-linux/issues/264#issuecomment-784985736
한 가지 해결책은 트래픽을 호스트로 리디렉션하는 특수 컨테이너를 사용하는 것입니다.이런 컨테이너는 여기 https://github.com/qoomon/docker-host 에서 찾을 수 있습니다.컨테이너 내에서 기본 경로를 파악하여 들어오는 연결을 위한 NAT 게이트웨이로 설치할 수 있습니다.
가상 예제 용법:
docker-host:
image: qoomon/docker-host
cap_add: [ 'NET_ADMIN', 'NET_RAW' ]
restart: on-failure
environment:
- PORTS=999
some-service:
image: ...
environment:
SERVER_URL: "http://docker-host:999"
command: ...
depends_on:
- docker-host
이것이 제 해결책입니다.
IP_ADDRESS=$(ip addr show | grep "\binet\b.*\bdocker0\b" | awk '{print $2}' | cut -d '/' -f 1)
그리고 도커-compose에서:
extra_hosts:
docker.host: ${IP_ADDRESS}
Linux의 경우 호스트 시스템의 기본 DNS 이름이 없습니다.이는 다음 명령을 실행하여 확인할 수 있습니다.
docker run -it alpine cat /etc/hosts
이 기능이 요청되었지만 구현되지 않았습니다.이 문제를 확인할 수 있습니다.설명한 대로 다음 명령을 사용하여 컨테이너에서 호스트의 IP를 찾을 수 있습니다.
netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}'
또는 다음을 통해 호스트 IP를 run 명령에 제공할 수 있습니다.docker run --add-host dockerHost:<ip-address> ...
https://github.com/docker/for-linux/issues/264
IP=$(ip -4 route list match 0/0 | awk '{print $3}')
echo "Host ip is $IP"
echo "$IP host.docker.internal" | sudo tee -a /etc/hosts
추가됩니다.host.docker.internal
당신의 호스트들에게.그러면 xdebug config에서 사용할 수 있습니다.
다음은 환경 변수의 예입니다.docker-compose.yml
XDEBUG_CONFIG: remote_host=host.docker.internal remote_autostart=On remote_enable=On idekey=XDEBUG remote_log=/tmp/xdebug.log remote_port=9999
tld; 정적 IP를 통해 호스트에 액세스합니다.172.17.0.1
호스트에 대해 HTTP 요청을 수행하는 중:
다음 명령을 실행하여 정적 IP를 가져옵니다.
ip addr show | grep "\binet\b.*\bdocker0\b" | awk '{print $2}' | cut -d '/' -f 1
허용된 호스트에 새 IP 추가
요청에서 방금 찾은 IP 주소를 사용합니다.
req = requests.get('http://172.17.0.1:8000/api/YOUR_ENDPOINT')
윈도우즈용 도커 데스크톱은 특수 WSL VM 도커-데스크탑 내부에서 도커 데몬을 실행하므로 host.docker.internal은 윈도우즈 WSL에만 존재합니다.자체 로컬 호스트와 Windows와 통신할 수 있는 자체 WSL2 인터페이스가 있습니다.이 VM에 정적 IP가 없습니다.이 IP는 VM이 생성될 때마다 생성되며 생성된 /etc/hosts의 host.docker.internal을 통해 모든 distro로 전달됩니다.브리지나 실제 v-switch가 없더라도 VM 내부 네트워크의 eth0에 열려 있는 모든 포트는 호스트 로컬 네트워크에 매핑되지만 호스트의 eth0에는 매핑되지 않습니다.실제 브리지 및 포트 매핑이 없습니다. 구성할 것이 없습니다.WSL VM 내부의 Localhost는 Linux 시스템의 localhost와 동일합니다. WSL VM 내부의 2개 프로세스는 localhost를 통해 통신할 수 있습니다.교차 분산 IPC는 host.docker.internal을 사용해야 합니다.WSL VM 내부에 브리지를 만들 수 있습니다. Docker가 합니다.
172.17.0.1과 같은 도커0 인터페이스 IP를 사용하는 것이 좋은 해결책이 될 수 있습니다.
연결하는 데 필요한 서비스가 외부 연결을 수신하는지 확인해야 합니다.대표적인 예로 127.0.0.1에 기본적으로 바인딩되는 Mysql이 있으며, 이는 외부 연결을 허용할 때까지 연결할 수 없습니다(예: 0.0.0에 바인딩).
리눅스의 경우 연결하려는 서비스 이름을 사용할 수 있었습니다. 예를 들어 컨테이너(php-fpm) 중 하나가 mysql에 연결하려고 했기 때문에mysql
호스트 이름으로, 그게 내 도커에 있는 서비스 이름이기 때문에..
언급URL : https://stackoverflow.com/questions/48546124/what-is-linux-equivalent-of-host-docker-internal
'programing' 카테고리의 다른 글
선언하기 전에 구조를 입력합니다. (0) | 2023.11.05 |
---|---|
WHERE 문이 작동하지 않음 (0) | 2023.10.31 |
자바스크립트에서 이중부정(!!!) - 목적은? (0) | 2023.10.31 |
워드프레스 REST API : WP REST API JSON 파일에서 "단어 전용" 콘텐츠를 얻는 방법은? (0) | 2023.10.31 |
스프링 부트 응용 프로그램에서 테이블 "xx"를 확인할 수 없습니다. (0) | 2023.10.31 |