도커 컨테이너에 호스트에서 열린 포트에 액세스 할 수 있습니까? 구체적으로는 호스트에서 MongoDB와 RabbitMQ를 실행하고 있으며 Docker 컨테이너에서 대기열을 수신하고 (선택적으로) 데이터베이스에 쓸 프로세스를 실행하고 싶습니다.도킹 컨테이너에 호스트 포트 포워드
컨테이너에서 호스트로 (-p 옵션을 통해) 전달할 수 있고 Docker 컨테이너 내에서 외부 세계 (예 : 인터넷)에 연결할 수 있다는 것을 알고 있지만, RabbitMQ 및 MongoDB 포트는 호스트에서 외부로 연결됩니다.
편집 : 몇 가지 설명이 : 결국 내가 pipework를 사용하여 사용자 정의 다리를 만들어 갔다 : My firewall is blocking network connections from the docker container to outside
편집 :
Starting Nmap 5.21 (http://nmap.org) at 2013-07-22 22:39 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
PORT STATE SERVICE
6311/tcp open unknown
[email protected] ~ % docker run -i -t base /bin/bash
[email protected]:/# apt-get install nmap
[email protected]:/# nmap 172.16.42.1 -p 6311 # IP found via docker inspect -> gateway
Starting Nmap 6.00 (http://nmap.org) at 2013-07-22 20:43 UTC
Nmap scan report for 172.16.42.1
Host is up (0.000060s latency).
PORT STATE SERVICE
6311/tcp filtered unknown
MAC Address: E2:69:9C:11:42:65 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 13.31 seconds
나는 용기 withing에 어떤 인터넷 연결을 얻기 위해이 트릭을해야했다 서비스가 브리지 IP에서 수신하도록하는 것입니다. MongoDB와 RabbitMQ가 더 유연함을 제공하기 때문에 docker bridge에서 수신하는 대신이 방법을 사용했습니다.
컨테이너는 요청을 보낼 IP를 어떻게 알 수 있습니까? 값을 하드 코딩 할 수는 있지만 (172.17.42.1 여기 그리고 내 테스트 장비에서 그렇습니다.하지만 항상 그렇습니다), 그렇다고해서 모든 호스트와 작업하는 docker 원칙에 어긋나는 것 같습니다! –
또 다른 옵션은 호스트 컴퓨터 서비스 (예 : mongodb)를 바인딩하여 모든 네트워크 인터페이스 (예 : 0.0.0.0)에서 수신 대기하고 내부 네트워크의 시스템 만 관련 포트에 연결 한 다음 호스트에 연결할 수 있도록 방화벽을 구성합니다 컨테이너 내에서 컴퓨터의 네트워크 IP 주소. – Josh
@ 셀do : 표시 할 인터페이스가 필요합니까? 나는 docker 1.7.1을 사용하고 있으며, 단지'lo'와'eth0'만을 가지고있다. – mknecht