问题概述
我使用反向代理 ( caddy
) 来通过连接容器和反向代理的helloworld
特定 docker 网络 ( srv
) 为我的应用程序 ( ) 提供服务。它在每个 docker compose 配置文件中定义(每个服务都有一个)。
我想移动到默认的 docker bridge 网络(bridge
)而不是将其明确添加到我的 docker compose 文件中。
我今天所拥有的
使用此拓扑,典型的 docker compose 文件helloworld
是
networks:
srv:
external: true
name: srv
services:
helloworld:
image: helloworld
container_name: helloworld
networks:
- srv
它运行良好,有一个反向代理配置,helloworld:7888
当外部调用到达反向代理时可以正确路由。
我希望得到什么
经过一番思考,我想摆脱网络srv
,逐步将我的 docker compose 堆栈移动到默认bridge
网络。
我的理解是,当你有一个没有指定网络的容器时,它会被绑定bridge
,你需要公开端口(或者,使用网络host
)。
我的问题:我需要将caddy
容器连接到这两个网络,并且看起来一旦您network:
在 docker compose 文件中指定,您就会失去默认的自动连接bridge
。
作为参考,我当前的caddy
设置是(我删除了不相关的部分,例如卷和环境)
networks:
srv:
external: true
name: srv
services:
caddy:
image: lucaslorentz/caddy-docker-proxy:ci-alpine
container_name: caddy
ports:
- 80:80
- 443:443
- 2015:2015
networks:
- srv
# - bridge
首先,我认为将其添加
bridge
到网络列表(上面注释掉)就足够了。bridge
无法识别(service "caddy" refers to undefined network bridge: invalid compose project
)。然后我想我可以添加
bridge
到networks:
定义中,就像srv
是,但是我得到了一个network-scoped alias is supported only for containers in user defined networks
(我不明白)。然后我想,最终,
caddy
暴露80
和443
不提及bridge
andy 在哪里(既不在caddy
也不在helloworld
配置中)可以工作:默认情况下hellowork
会绑定到bridge
,并且这种流量会以某种方式进入暴露的caddy
端口。但事实并非如此。
我的问题
如何配置 docker compose 文件以便它能够同时看到用户定义的网络和默认网络?
注意:2019 年问题与我的类似。如果答案是“不可能”,我会将我的标记为重复