【问题标题】:"This node is not a swarm manager" error, but I'm not using docker swarm“此节点不是 swarm 管理器”错误,但我没有使用 docker swarm
【发布时间】:2019-07-30 17:11:24
【问题描述】:

为了测试我们的托管构建,我正在尝试建立一个与主机和外部世界隔离的 docker 网络。

我有以下docker-compose.yml(灵感来自this forum post):

version: '3'

services:
  redis:
    image: "redis:2.8.23"
    networks:
      - isolated

  # ... more services (TODO)

networks:
  isolated:
    driver: overlay
    internal: true

当我运行docker-compose up -d;它创建了网络,但随后无法创建容器,报告以下内容:

错误:此节点不是集群管理器。使用“docker swarm init”或“docker swarm join”将此节点连接到swarm,然后重试。

但我没有使用 docker swarm,也不想使用。

如果我从文件中删除 services: 节,它会启动网络而不会出现错误。它警告网络未使用(显然)。

如果我删除 services/redis/networks 节,它会正确地调出容器。

我做错了什么?

我找到了this answer,它使用driver: bridge 作为网络,但仍然允许访问主机。


  • Docker 版本 18.09.3,构建 774a1f4
  • docker-compose 版本 1.21.2,构建 a133471

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您已将网络驱动程序指定为overlay

    overlay network driver 非常依赖于 swarm 模式,可以有效地被认为是一个 swarm 模式组件。

    相反,您应该选择本地范围驱动程序而不是群范围驱动程序。

    您应该使用的驱动程序是bridge 驱动程序。 bridge network driver 不是 swarm 模式的一部分,并且不依赖 swarm 模式激活来使用它。

    由于您使用的是 docker-compose,您可以完全忽略特定的驱动程序,它会为您选择合适的驱动程序。我建议完全删除 driver: overlay 行,并将文件的其余部分保持原样:

    version: '3'
    
    services:
      redis:
        image: "redis:2.8.23"
        networks:
          - isolated
    
      # ... more services (TODO)
    
    networks:
      isolated:
        internal: true
    

    【讨论】:

    • 这就是我最后所做的,但它使容器能够访问主机。我想我可以忍受,但我更喜欢完全隔离的网络......
    • 也看看macvlan驱动。
    • 我在尝试为独立容器创建 --attachable 覆盖网络时遇到同样的错误
    • @GunjanShah 如果您想使用任何 swarm 功能,包括可附加的覆盖网络,您需要使节点成为 swarm 的一部分。
    • @programmerq,我指的是 docker 网站上的文档:docs.docker.com/network/overlay。用于独立容器的覆盖网络的文档确实令人困惑。他们没有明确提到节点必须是集群资源,我们可以在其中创建可附加的覆盖网络。即使我在这个查询上添加了新问题。如果您不介意,可以在此处添加更多详细信息:stackoverflow.com/questions/67134199/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多