在Docker中,如果我将网络设置为主机,是否需要发布端口?

时间:2016-03-30 21:20:24

标签: docker

今天我遇到了一个问题,我有一个EXPOSEs几个端口的Dockerfile,我想用--net=host标志运行它。

但是,所有与容器应该监听的端口的连接都被拒绝了。

在容器上运行docker inspect我注意到了这一点:

        "Ports": {
            "8000/tcp": {},
        }

越来越恼火我一起删除了--net标记,然后转到默认的bridge网络。给它带来惊喜!

    "Ports": {
        "8000/tcp": null,
    }

除了现在它有这个奇怪的null设置。这有什么区别?此外,我正在尝试与另一个VM通信的VM内部运行。可能有一百万个理由不起作用。

1 个答案:

答案 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通吗?他们共用同一个局域网吗?是防火墙吗?