在Docker Swarm主机网络中发布端口

时间:2018-12-12 03:40:39

标签: docker

我用docker-18.03.1-ce创建了一个docker swarm集群。

部署kafka容器时,我在stack.yml中看到这样的代码:

  kafka:
    image: wurstmeister/kafka:2.11-2.0.0
    ports:
      - target: 9094
        published: 9094
        protocol: tcp
        mode: host

但是在docker的网络体系结构文章(https://success.docker.com/article/networking)中,它说:“使用主机驱动程序,Docker不会管理容器网络堆栈的任何部分,例如端口映射或路由规则。这意味着-p和--icc之类的通用网络标志对于主机驱动程序没有意义。他们被忽略了。'

我很困惑发布的端口是否会在Swarm主机网络中生效?

有人知道吗?

1 个答案:

答案 0 :(得分:1)

我从Docker的网络体系结构文章(https://success.docker.com/article/networking)中找到了答案:

主机模式端口发布仅在运行特定服务任务的主机上公开端口。端口直接映射到该主机上的容器。每个主机上只能运行给定服务的单个任务,以防止端口冲突。

$ docker service create --replicas 2 --publish mode=host,target=80,published=8080 nginx

主机模式需要mode = host标志。它在运行这两个容器的主机上本地发布端口8080。它不应用负载平衡,因此流向那些节点的流量仅定向到本地容器。如果没有足够数量的副本副本可用端口,则会导致端口冲突。

相关问题