为了测试我们的托管构建,我正在尝试建立一个与主机和外部世界隔离的 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
时;它会创建网络,但随后无法创建容器,并报告以下内容: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
节,它会正确显示容器。我究竟做错了什么?
我找到了 this answer ,它使用
driver: bridge
作为网络,但它仍然允许访问主机。最佳答案
您已将网络驱动程序指定为 overlay
。
overlay network driver 非常依赖于群模式,可以有效地被认为是群模式组件。
相反,您应该选择一个本地范围驱动程序而不是群范围驱动程序。
您应该使用的驱动程序是 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
关于docker - "This node is not a swarm manager"错误,但我没有使用 docker swarm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55067113/