programing

"host.docker.internal"과 동등한 리눅스란 무엇입니까?

subpage 2023. 10. 31. 22:08
반응형

"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 요청을 수행하는 중:

  1. 다음 명령을 실행하여 정적 IP를 가져옵니다.ip addr show | grep "\binet\b.*\bdocker0\b" | awk '{print $2}' | cut -d '/' -f 1

  2. 허용된 호스트에 새 IP 추가

  3. 요청에서 방금 찾은 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

반응형