在Docker中,如果我将networking设置为主机,是否需要发布端口?
我今天遇到了一个问题,我有一个Dockerfile EXPOSEs
几个端口,我想用--net=host
标志运行它。
但是,所有与该集装箱应该在监听的港口的连接都被拒绝了。
运行docker inspect
容器我注意到这一点:
"Ports": { "8000/tcp": {}, }
越来越激怒,我一起删除了--net
标志,并去了默认的bridge
networking。 惊喜的作品!
"Ports": { "8000/tcp": null, }
除了现在它有这个奇怪的null
设置。 这里有什么区别? 此外,我正在试图与另一个虚拟机通信的虚拟机内部运行。 可能有一百万个原因,这是行不通的。
题
当networking模式是
host
时是否需要发布选项?
回答
不,主机networking堆栈由容器直接使用:
'host': use the Docker host network stack. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure.
certificate
用netcat
启动容器:
user@host:~$ docker run -it --rm --net host nc:1.10-41 root@container:/# nc -l -p 9999
回到主机:
user@host:~$ nc 127.0.0.1 9999 Sending a message for test <enter>
该消息将从容器中执行的netcat
命令显示。
监控
主机的netstat
将显示已build立的连接:
user@host:~$ netstat latuep |grep 9999 tcp 0 0 localhost:38600 localhost:9999 ESTABLISHED tcp 0 0 localhost:9999 localhost:38600 ESTABLISHED
至于你的问题
错误可能来自另一个configuration/networking环境。 虚拟机能互相ping通吗? 他们共享相同的局域网吗? 防火墙是否设置?