为了测试我们的托管构建,我正在尝试建立一个与主机和外界隔离的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
进行网络连接,但是仍然允许访问主机。
答案 0 :(得分:2)
您已将网络驱动程序指定为overlay
。
overlay network driver很大程度上取决于群体模式,可以有效地视为群体模式的组成部分。
相反,您应该选择本地驱动程序而不是群集范围驱动程序。
您应该使用的驱动程序是bridge
驱动程序。 bridge network driver不是群集模式的一部分,并且不依赖于启用的群集模式。
由于您使用的是docker-compose,因此您可以完全不使用特定的驱动程序,它将为您选择合适的驱动程序。我建议完全删除driver: overlay
行,并按原样保留文件的其余部分:
version: '3'
services:
redis:
image: "redis:2.8.23"
networks:
- isolated
# ... more services (TODO)
networks:
isolated:
internal: true