我用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主机网络中生效?
有人知道吗?
答案 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。它不应用负载平衡,因此流向那些节点的流量仅定向到本地容器。如果没有足够数量的副本副本可用端口,则会导致端口冲突。