【问题标题】:Publish port in Docker Swarm host network在 Docker Swarm 主机网络中发布端口
【发布时间】:2018-12-12 14:08:17
【问题描述】:

我使用 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 主机网络中生效?

有人知道吗?

【问题讨论】:

    标签: docker


    【解决方案1】:

    我自己从docker的网络架构文章(https://success.docker.com/article/networking)中找到答案:

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

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

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

    【讨论】:

    • 发布端口与使用--network host 运行 Swarm 不同。这就是文档所指的。在这种情况下,所有端口都会自动在主机上可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多