답변:
일관되고 잘 이해되고 이식 가능한 방법으로이 작업을 수행하는 방법에 대한 몇 가지 오랜 토론이 있습니다. 완전한 해결책은 없지만 아래 토론에 연결해 드리겠습니다.
어쨌든 많은 사람들은 --add-host 옵션을 사용하여 docker run을 사용하여 호스트의 IP 주소를 컨테이너의 / etc / host 파일에 추가하려고합니다. 거기에서 필요한 포트의 호스트에 연결하는 것은 간단합니다.
컨테이너 호스트 파일에 항목 추가
하나 이상의 --add-host 플래그를 사용하여 컨테이너의 / etc / hosts 파일에 다른 호스트를 추가 할 수 있습니다. 이 예제는 docker라는 호스트에 고정 주소를 추가합니다.
$ docker run --add-host=docker:10.180.0.1 --rm -it debian $$ ping docker PING docker (10.180.0.1): 48 data bytes 56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms 56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms ^C--- docker ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms
참고 : 때때로 Docker 호스트에 연결해야합니다. 즉, 호스트의 IP 주소를 가져옵니다. 다음 프로세스를 단순화하기 위해 다음 쉘 명령을 사용할 수 있습니다.
$ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }'" $ docker run --add-host=docker:$(hostip) --rm -it debian
선적 서류 비치:
https://docs.docker.com/engine/reference/commandline/run/
컨테이너에서 호스트에 액세스하는 것에 대한 토론 :
18.03 문서에서 :
컨테이너에서 호스트의 서비스로 연결하고 싶습니다.
호스트의 IP 주소가 변경되었습니다 (또는 네트워크에 액세스 할 수없는 경우 없음). 18.03부터는
host.docker.internal
호스트가 사용하는 내부 IP 주소로 확인되는 특수 DNS 이름에 연결하는 것이 좋습니다 .게이트웨이는로 접근 할 수 있습니다
gateway.docker.internal
.
예 : 다음은 컨테이너 내 MySQL 연결 문자열에서 호스트의 MySQL 인스턴스에 액세스하기 위해 사용하는 내용입니다.
mysql://host.docker.internal:3306/my_awesome_database
Docker 17.06부터는 호스트의 IP 주소로 확인되는 특수 Mac 전용 DNS 이름을 docker 컨테이너에 사용할 수 있습니다. 그것은:
docker.for.mac.localhost
설명서는 다음과 같습니다. https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support
docker.for.mac.localhost
작품18.03.1-ce-mac65
Docker 18.03부터 host.docker.internal 을 사용하십시오 .
Docker version 18.03.0-ce, build 0520e24
18.03.1-ce-mac65
다른 답변은 저에게 효과적이지 않았습니다. 내 컨테이너가 host.docker.internal을 사용하여 호스트 IP를 확인할 수 없습니다 . 두 가지 방법이 있습니다
호스트 네트워크 공유 --net = host :
docker run -it --net=host myimage
일반적으로 고정 표시기의 IP 주소, 사용 172.17.0.1을 . ifconfig 명령을 호출하고 docker 인터페이스의 inet addr를 잡아서 확인할 수 있습니다
user@ubuntu:~$ ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:a4:a2:b2:f1
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:a4ff:fea2:b2f1/64 Scope:Link
이 IP 주소가 있으면 docker run 및 응용 프로그램 또는 인수로 인수로 전달하여 볼륨을 통해 jdbc.properties의 위치를 호스트 시스템의 디렉토리에 맵핑하여 파일을 외부에서 관리 할 수 있습니다 .
docker run -it -v /host_dir/docker_jdbc_config:${jetty_base}/var/config myimage
참고 : 데이터베이스에서 외부 연결을 허용하지 않을 수 있습니다. postgresql의 경우 여기 와 여기에 설명 된대로 2 개의 파일을 편집해야합니다 .
모든 주소를 수신하도록 postgresql.conf를 편집하십시오. 기본적으로 localhost를 가리 킵니다.
listen_addresses = '*'
모든 주소에서 연결할 수 있도록 pg_hba.conf를 편집하십시오. 마지막 줄에 추가하십시오 :
host all all 0.0.0.0/0 md5
중요 : 실제로 수행중인 작업이 확실하지 않으면 데이터베이스 액세스를 업데이트하는 마지막 단계는 프로덕션 용도로 권장되지 않습니다.