是否有可能让主机打开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