Mar*_*ies 10 networking automation docker docker-compose
在Docker中使用自定义网络时
networks:
default:
external:
name: service-tier
Run Code Online (Sandbox Code Playgroud)
并尝试运行它,我得到错误
错误:网络服务层声明为外部,但无法找到.请手动创建网络,
docker network create service-tier然后重试.
是否可以使用docker-compose自动创建网络,或者除了先手动创建网络之外没有别的办法吗?
Gri*_*mmy 10
external是使用现有的网络.如果你想创建网络,你只需:
networks:
network1:
network2:
Run Code Online (Sandbox Code Playgroud)
..指示撰写网络.它们将被命名为使用<compose-dir>-<network name>验证创建docker network ls.
您还可以覆盖默认网络或指定更多属性.
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1450
Run Code Online (Sandbox Code Playgroud)
..将覆盖默认网络设置MTU为1450(当主机低于1500 mtu并且路径mtu发现无法正常工作时很方便).还有其他桥驱动程序选项.
external 当您希望两个组合设置中的服务相互通信或者您有一个手动创建的网络时,更有意义.
不要external: true与混为一谈internal: false。要允许单独的撰写项目共享网络连接并自动创建该网络,只需name在每个撰写文件中指定匹配的网络即可。
\n\n设置为 true 时允许创建外部隔离网络
\n
默认情况下,网络不是内部的,因此已经提供外部连接。
\n\n\n如果设置为 true,则 external 指定此网络\xe2\x80\x99s 生命周期在应用程序之外进行维护。
\n
该external属性指的是网络的管理方式,并不描述其连接性或缺乏连接性。
external: false:
如果没有指定的name属性,自动创建的网络将使用以项目名称为前缀的密钥。显式设置名称可以防止项目范围界定并允许共享使用。
project1
services:\n db:\n networks:\n service_tier:\n aliases:\n - remotedb\n\nnetworks:\n service_tier:\n name: service_tier\nRun Code Online (Sandbox Code Playgroud)\nproject2
services:\n web:\n networks:\n service_tier:\n\nnetworks:\n service_tier:\n name: service_tier\nRun Code Online (Sandbox Code Playgroud)\n$ docker network ls\n\nNETWORK ID NAME DRIVER SCOPE\nca564d4e76e6 bridge bridge local\n6b4d2866afa8 host host local\n15fa57f54e0b project1_default bridge local\na5eb24fc02b0 project2_default bridge local\nd4b0a10c1385 service_tier bridge local\n614c5864df80 none null local\nRun Code Online (Sandbox Code Playgroud)\n在此配置中,web服务 in可以通过使用共享网络上的主机别名来project2访问db服务 in 。project1remotedbservice_tier
如果没有name这些networks部分,您将看到单独的内容project1_service_tier,project2_service_tier并且无法进行交流。
正如@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
Run Code Online (Sandbox Code Playgroud)
撰写档案2
version: '2'
services:
svc-using-svc-name:
...
networks:
- default
- specific-network-name
external_links:
- exact-container-reference
...
networks:
specific-network-name:
external: true
Run Code Online (Sandbox Code Playgroud)
我也有这个错误:
Network "NETWORK_NAME" needs to be recreated - option "driver" has changed
Run Code Online (Sandbox Code Playgroud)
docker network ls
docker network rm NETWORK_NAME
docker-compose up
Run Code Online (Sandbox Code Playgroud)
删除问题网络并重新创建后,一切都很好。
| 归档时间: |
|
| 查看次数: |
20900 次 |
| 最近记录: |