P粉5170907482023-08-24 11:07:24
Docker v 20.10 이상(2020년 12월 14일 기준)
내부 IP 주소를 사용하거나 호스트가 사용하는 내부 IP 주소를 확인하는 특수 DNS 이름host.docker.internal
에 연결하세요.
이는 개발 목적으로 사용되며 Docker Desktop 외부의 프로덕션 환경에는 적용되지 않습니다.
Linux 경고
Linux의 Docker에서 이 기능을 활성화하려면 --add-host=host.docker.internal:host-gateway
docker 명령에
를 추가하여 기능을 활성화하세요.
Linux의 Docker Compose에서 이 기능을 활성화하려면 컨테이너 정의에 다음 줄을 추가하세요.
으아아아일부 사용자에 따르면 특수 DNS 이름은 Docker의 기본 bridge
브리지 네트워크에서만 작동하고 사용자 지정 네트워크에서는 작동하지 않습니다.
Docker v 18.03 이상(2018년 3월 21일 기준)
내부 IP 주소를 사용하거나 호스트가 사용하는 내부 IP 주소를 확인하는 특수 DNS 이름host.docker.internal
에 연결하세요.
Linux 지원이 보류 중입니다. https://github.com/docker/for-linux/issues/264
Mac용 Docker v 17.12~v 18.02
위와 동일하지만 docker.for.mac.host.internal
docker.for.mac.host.internal을 사용합니다.
Mac용 Docker v 17.06~v 17.11
위와 동일하지만 대신 docker.for.mac.localhost
docker.for.mac.localhost를 사용하세요.
Mac 17.05 이하용 Docker
Docker 컨테이너에서 호스트 시스템에 액세스하려면 네트워크 인터페이스에 IP 별칭을 연결해야 합니다. 원하는 IP를 바인딩할 수 있지만 다른 용도로 사용하지 않는지 확인하세요.
sudo ifconfig lo0 别名 123.123.123.123/24
sudo ifconfig lo0 별칭 123.123.123.123/24
그런 다음 서버가 위 IP 또는 0.0.0.0
。如果它正在监听本地主机127.0.0.1
0.0.0.0에서 수신 대기하는지 확인하세요. localhost
그런 다음 호스트에 액세스하려면 도커 컨테이너를 이 IP로 지정하세요!
curl -X GET 123.123.123.123:3000
테스트하려면 컨테이너 내부에서
별칭은 재부팅할 때마다 재설정되므로 필요한 경우 시작 스크립트를 만드세요.
솔루션 및 추가 문서: https://docs.docker.com/desktop/networking/#use-cases-and-workarounds-for-all-platforms
🎜P粉0193532472023-08-24 09:26:22
편집자:
Docker-for-mac 또는 Docker-for-Windows 18.03 이상을 사용하는 경우 연결 문자열에서 host.docker.internal
127.0.0.1 대신 호스트 < /code>를 사용하세요.
Docker-for-Linux 20.10.0 이상을 사용하는 경우 호스트를 사용할 수도 있습니다. host.docker.internal
if您使用 --add-host host.docker.internal:host-gateway
--add-hosthost.docker.internal:host-gateway 옵션 Docker 컨테이너를 선택하거나 docker-compose.yml 파일에 다음 코드 조각을 추가했습니다.
docker run
命令中使用 --network="host"
,然后 docker 容器中的 127.0.0.1
TLDR
docker run 명령에서 --network="host"를 사용하면 docker 컨테이너의 p>127.0.0.1이 docker 호스트를 가리킵니다.
다양한 네트워크 모드docker0
를 제공합니다. 선택한 모드에 따라 Docker 호스트에서 실행되는 MySQL 데이터베이스에 다르게 연결됩니다.
docker run --network="bridge" (기본값)sudo ip addr show docker0
docker0이라는 브리지를 생성합니다. 도커 호스트와 도커 컨테이너 모두 브리지에 IP 주소를 가지고 있습니다. docker0
网络接口上的 IP 地址为 172.17.42.1
sudo ip addr show docker0을 입력하면 다음과 같은 출력이 표시됩니다. docker run --rm -it ubuntu:trusty bash
并在容器中输入 ip addr show eth0
으아아아
docker0 네트워크 인터페이스에 있는 내 Docker 호스트의 IP 주소는 172.17.1.192
172.17.42.1입니다.
이제 새 컨테이너를 시작하고 그 위에 쉘을 가져옵니다. 172.17.42.1
docker run --rm -it ubuntu:trusty bash 및 컨테이너 유형
또는 Docker 컨테이너를 실행하고 네트워크 설정을 主机
。这样的容器将与 docker 主机共享网络堆栈,从容器的角度来看,localhost
(或127.0.0.1
)将引用 docker 主机。 p>로 설정할 수도 있습니다.
Docker 컨테이너에서 열린 모든 포트는 Docker 호스트에서 열립니다. -p
或 <代码>-P docker run
option이 필요하지 않습니다.
내 도커 호스트의 IP 구성:
으아악그리고 host 모드의 도커 컨테이너:
으아악보시다시피, 도커 호스트와 도커 컨테이너는 정확히 동일한 네트워크 인터페이스를 공유하므로 동일한 IP 주소를 갖습니다.
브리지 모드의 컨테이너에서 Docker 호스트에서 실행 중인 MySQL에 액세스하려면 MySQL 서비스가 172.17.42.1
IP 주소
이렇게 하려면 MySQL 구성 파일(my.cnf)에 bind-address = 172.17.42.1
或 bind-address = 0.0.0.0
)가 있는지 확인하세요.
게이트웨이의 IP 주소로 환경 변수를 설정해야 하는 경우 컨테이너에서 다음 코드를 실행할 수 있습니다.
으아악그런 다음 애플리케이션에서 DOCKER_HOST_IP
환경 변수를 사용하여 MySQL에 대한 연결을 엽니다.
참고: bind-address = 0.0.0.0
를 사용하면 MySQL 서버가 모든 네트워크 인터페이스의 연결을 수신합니다. 이는 인터넷에서 MySQL 서버에 액세스할 수 있음을 의미하며 이에 따라 방화벽 규칙을 설정해야 합니다.
참고 2: bind-address=172.17.42.1
을 사용하는 경우 MySQL 서버는 127.0.0.1
에 대한 연결을 수신하지 않습니다. MySQL에 연결하려는 Docker 호스트에서 실행 중인 프로세스는 bind-address = 172.17.42.1
,您的MySQL服务器将不会侦听与127.0.0.1
建立的连接>。在 docker 主机上运行的想要连接到 MySQL 的进程必须使用 172.17.42.1
IP 주소를 사용해야 합니다.
호스트 모드의 컨테이너에서 Docker 호스트에서 실행 중인 MySQL에 액세스하려면 컨테이너의 MySQL 구성을 bind-address = 127.0.0.1
并连接到 127.0.0.1
로 유지하면 됩니다.
참고: mysql -h 127.0.0.1
,而不是mysql -h localhost
를 사용하세요. 그렇지 않으면 MySQL 클라이언트가 Unix 소켓을 사용하여 연결을 시도합니다.