今天我遇到了一个问题,我有一个EXPOSEs
几个端口的Dockerfile,我想用--net=host
标志运行它。
但是,所有与容器应该监听的端口的连接都被拒绝了。
在容器上运行docker inspect
我注意到了这一点:
"Ports": {
"8000/tcp": {},
}
越来越恼火我一起删除了--net
标记,然后转到默认的bridge
网络。给它带来惊喜!
"Ports": {
"8000/tcp": null,
}
除了现在它有这个奇怪的null
设置。这有什么区别?此外,我正在尝试与另一个VM通信的VM内部运行。可能有一百万个理由不起作用。
答案 0 :(得分:2)
网络模式为
host
时是否需要发布选项?
不,容器直接使用主机网络堆栈:
'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.
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
将显示已建立的连接:
user@host:~$ netstat latuep |grep 9999
tcp 0 0 localhost:38600 localhost:9999 ESTABLISHED
tcp 0 0 localhost:9999 localhost:38600 ESTABLISHED
错误可能源于其他配置/网络环境。虚拟机可以相互ping通吗?他们共用同一个局域网吗?是防火墙吗?