docker - 为什么我必须在 docker-compose.yml 中两次声明网络?
问题描述
我有点困惑。在 docker-compose.yml 文件中:
version: "3"
networks:
proxy:
external: true
services:
eliko:
image: irmscher/eliko:v1
labels:
- traefik.backend=eliko
- traefik.frontend.rule=Host:eliko.bloggercraft.com
- traefik.docker.network=proxy
networks:
- proxy
为什么我必须指定网络两次?第一次networks: proxy
和第二次在服务中networks: -proxy
?
我实际上已经docker network create proxy
事先创建了“代理”网络。我想networks:
在 docker-compose CREATE 网络中,所以我决定删除它,只将网络名称留在我的服务(eliko)标头中。但后来我收到一个错误:ERROR: Service "eliko" uses an undefined network "proxy"
所以我的问题是..这到底是做什么的:
networks:
proxy:
external: true
因为,据我所知,这是:
networks:
- proxy
连接到网络,所以前面应该创建网络?如果我创建一个网络docker network create
,它是相同的还是?
这里有点糊涂...
解决方案
顶级networks
节告诉 docker-compose “这些是存在的网络”。没有它,当您尝试将eliko
容器连接到proxy
网络时,docker-compose 将不知道该怎么做。你会得到这个:
ERROR: Service "eliko" uses an undefined network "proxy"
请记住,在标准情况下,docker-compose 中的网络以项目名称为前缀。如果你有一个非外部网络,像这样:
version: "3"
networks:
proxy:
services:
eliko:
image: irmscher/eliko:v1
labels:
- traefik.backend=eliko
- traefik.frontend.rule=Host:eliko.bloggercraft.com
- traefik.docker.network=proxy
networks:
- proxy
然后 compose 实际上会创建一个名为的网络project_proxy
(project
默认情况下,其中包含您的目录的名称docker-compose.yml
)。只是因为您已将网络声明为external
compose 才知道您要使用现有网络。
推荐阅读
- azure - 功能 App Premium Elastic Plan wrt Scale-up 和 Scale-out 设置中的 EP1 实例成本
- angularjs - 无法让 Angular 应用程序在布局的 MVC 视图中工作
- algorithm - 在时间复杂度方面采用最佳方法从字符矩阵形成字符串的方法有多少?
- javascript - Gatsby:使用MDX时索引页“/”加载失败,其他路径加载
- android - 我的自定义 RecyclerView 适配器有什么错误?
- java - 示例:使用 Volley 以编程方式发送 sendgrid 电子邮件
- csv - 同时创建和编写两个CSV golang
- c# - 我对这段代码的理解是否正确/完整?
- wordpress - 在woocommerce中购买后如何在特定时间内免费提供相同的产品?
- angular - 材质按钮大小响应