在Docker中使用自定义网络时
networks:
default:
external:
name: service-tier
尝试运行它,我收到了错误
错误:网络服务层声明为外部,但不能 找到。请使用
docker network create service-tier
手动创建网络,然后重试。
是否可以使用docker-compose自动创建网络,或者除了先手动创建网络之外别无其他方法吗?
答案 0 :(得分:8)
external
是使用现有网络。如果你想创建网络,你只需要做:
networks:
network1:
network2:
..指示撰写网络。它们将被命名为<compose-dir>-<network name>
使用docker network ls
验证创建。
您还可以覆盖默认网络或指定更多属性。
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1450
..将覆盖默认网络设置MTU为1450(当主机低于1500 mtu且路径mtu发现无法正常工作时很方便)。有other bridge driver options。
当您希望两个组合设置中的服务相互通信或者您手动创建网络时, external
更有意义。
答案 1 :(得分:5)
当@Grimmy正确指出时,docker会创建所有提到的网络,因此可以稍后通过运行另一个撰写文件来引用这些网络。
但是,默认生成的网络名称几乎不具有实用性或健壮性。因为它可能会很长或docker
团队改变他们对命名策略的看法。
但是,由于撰写文件版本3.5
(意味着docker-compose
版本1.18.0
),可以将网络命名为喜欢,因此整体解决方案更加强大。
请参阅以下代码片段,了解如何实现此目标:
撰写文件1
version: '3.5'
services:
svc-name:
...
networks:
- specific-network-name
container_name: "exact-container-reference"
...
networks:
specific-network-name:
external: false
name: specific-network-name
撰写文件2
version: '2'
services:
svc-using-svc-name:
...
networks:
- default
- specific-network-name
external_links:
- exact-container-reference
...
networks:
specific-network-name:
external: true
答案 2 :(得分:1)
我也有此错误:
Network "NETWORK_NAME" needs to be recreated - option "driver" has changed
docker network ls
docker network rm NETWORK_NAME
docker-compose up
删除问题网络并重新创建之后,一切都很好。
答案 3 :(得分:0)
运行以下命令:docker network create ddev_default