这个节点不是Swarm管理器错误,但我没有使用Docker Swarm。

16
为了测试我们的托管构建,我正在尝试设置一个与主机和外部世界隔离的docker网络。
我有以下docker-compose.yml文件(受这个论坛帖子的启发):
version: '3'

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

  # ... more services (TODO)

networks:
  isolated:
    driver: overlay
    internal: true

当我运行docker-compose up -d时,它会创建网络,但然后无法创建容器,并报告以下错误:
ERROR: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
但是我既不使用docker swarm,也不想使用。
如果我从文件中删除services:部分,则可以在没有错误的情况下启动网络。它会警告该网络未使用(显然)。
如果我删除services/redis/networks部分,则可以正确启动容器。
我偶然发现了这个答案,它使用driver: bridge来设置网络,但仍允许访问主机。
  • Docker 版本 18.09.3,构建版本 774a1f4
  • docker-compose 版本 1.21.2,构建版本 a133471
1个回答

17

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

覆盖网络驱动程序非常依赖于群集模式,并且可以有效地被认为是群集模式的组件。

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

您应该使用的驱动程序是bridge驱动程序。桥接网络驱动程序不是群集模式的一部分,并且不依赖于群集模式处于活动状态才能使用它。

由于您正在使用docker-compose,因此可以完全省略特定的驱动程序,它将为您选择适当的驱动程序。我建议完全删除driver: overlay行,并保留文件的其余部分:

version: '3'

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

  # ... more services (TODO)

networks:
  isolated:
    internal: true

这是我最终做的事情,但它使容器能够访问主机。我可以接受这一点,但我更喜欢一个完全隔离的网络... - Roger Lipscombe
也可以看一下macvlan驱动程序。 - programmerq
我在尝试为独立容器创建可附加的覆盖网络时遇到了相同的错误。 - Gunjan Shah
@GunjanShah 如果你想使用任何Swarm功能,包括可附加的覆盖网络,你需要将节点作为Swarm的一部分。 - programmerq
@programmerq,我在参考Docker网站上的文档:https://docs.docker.com/network/overlay/。独立容器的覆盖网络文档真的很令人困惑。他们没有明确说明节点必须是Swarm资源,才能创建可连接的覆盖网络。即使我已经针对此问题添加了新的问题。如果您不介意的话,您可以在那里添加更多细节:https://stackoverflow.com/questions/67134199/error-while-creating-overlay-network-for-standalone-containers - Gunjan Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接