2015-01-20 9 views
56

일부 호스트 컴퓨터에서 실행중인 mysql 데이터베이스가 있고이 호스트도 도커 컨테이너를 실행중인 경우 : 호스트에서 실행중인 도커 컨테이너 내에서 mysql 데이터베이스에 액세스하려면 어떻게해야합니까? ?.도커 컨테이너에서 호스트 데이터베이스에 액세스

예를 들어 컨테이너에 호스트 포트를 게시하는 방법이 있습니까? (docker run -p의 역함수)?

+0

, 컨테이너는 호스트에 연결할 수 없습니다 다른 인터넷 연결처럼 그 포트에 있습니까? – jwodder

답변

55

일관되고 잘 이해되고 이식 가능한 방식으로이를 수행하는 방법에 대한 몇 가지 오랜 논의가 있습니다. 완전한 해결책은 없지만 아래 토론과 연결해 드리겠습니다.

호스트의 IP 주소를 컨테이너의/etc/host 파일에 추가하기 위해 docker를 실행하기 위해 --add-host 옵션을 사용 해보려는 경우가 많습니다.

당신은 컨테이너의/etc/hosts 파일에 다른 호스트를 추가 할 수 있습니다 하나를 사용하여 컨테이너 호스트에 항목을 추가

가 파일 : 거기에서 그것은 어떤 필요한 포트에 호스트에 연결하는 사소한 또는 그 이상 --add-host 플래그. 이 예는 호스트 이름이 고정 표시기에 대한 고정 주소를 추가

$ 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 

참고 : 때때로 호스트의 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://github.com/docker/docker/issues/1143

: 컨테이너에서 호스트에 액세스하는

https://docs.docker.com/engine/reference/commandline/run/

토론

+3

hostip 별칭에서 마지막 백 슬래시를 삭제해야했습니다. – Private

12

부터 Docker 17.06부터 Mac 전용 DNS 이름은 호스트의 IP 주소로 확인되는 도커 컨테이너에서 사용할 수 있습니다. 그것은이다

docker.for.mac.localhost

문서가 여기에 있습니다 : MySQL 서버가 포트에서 수신 대기하는 경우 https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support

+1

'docker.for.mac.host.internal'을'Docker 17.12.0 ce' 이후로 보냅니다. https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-17120-ce-mac46-2018-01-09-stable – Zangetsu

관련 문제