是否有可能讓主機打開Docker容器訪問端口?具體來說,我有MongoDB和RabbitMQ在主機上運行,我想在Docker容器中運行一個進程來偵聽隊列並(可選)寫入數據庫。將主機端口轉發到碼頭集裝箱
我知道我可以從容器轉發到主機(通過-p選項),我有一個從外部世界(即互聯網)從Docker容器內的連接,但我不想公開從主機到外部世界的RabbitMQ和MongoDB端口。
編輯:澄清:
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容器:My firewall is blocking network connections from the docker container to outside
編輯:最後,我創建一個使用pipework定製橋去並讓這些服務在網橋IP上進行監聽。我採用這種方法,而不是讓MongoDB和RabbitMQ在Docker橋上偵聽,因爲它提供了更大的靈活性。
容器如何知道要發送請求的IP?我可以對這個值進行硬編碼(172.17.42.1這裏和我的測試平臺上,但總是如此),但這似乎違背了與任何主機一起工作的碼頭原則! –
另一種選擇是綁定您的主機服務(例如mongodb)以偵聽所有網絡接口(即0.0.0.0),配置防火牆,以便只有內部網絡上的機器才能連接到相關端口,然後連接到主機機器的網絡IP地址在容器內。 – Josh
@Seldo:該界面是否需要配置才能顯示?我使用的是Docker 1.7.1,我只有'lo'和'eth0'。 – mknecht