单个容器上的多个 docker 网络
Multiple docker networks on a single container
我有一个 docker 堆栈配置,其中包含一个名为 traefik
的覆盖网络。它包含我的 traefik
反向代理容器,然后是几个服务于各种子域的容器。我正在添加一个新的,它需要访问我在另一个容器中创建的数据库服务器,所以我添加了如下内容:
networks:
traefik:
driver: overlay
database:
driver: overlay
services:
traefik:
image: traefik
networks:
- traefik
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
# ...
# ...
database:
image: postgres:9.6-alpine # match what's being used by heroku
networks:
- database
staging:
image: staging
networks:
- traefik
- database
deploy:
labels:
traefik.enable: "true"
traefik.frontend.rule: Host:lotto-ticket.example.com
traefik.docker.network: traefik
traefik.port: 3000
当我这样做时,反向代理开始返回网关超时代码,表明 staging
容器不再可用于 traefik
网络。如果我从 staging
容器中删除 database
网络,子域会按预期提供服务(尽管它显然无法访问数据库),当我重新添加它时,反向代理开始获取超时。
这两个网络之间是否存在某种冲突?我是否需要配置 IP 路由才能在单个容器上使用多个 docker 网络?
编辑:在配置摘录中添加了更多详细信息
您需要使用标签 traefik.docker.network
告诉 traefik 在哪个网络上连接到您的服务。在您的情况下,该标签将设置为 ${stack_name}_traefik
,其中 ${stack_name}
是您的堆栈的名称。
我有一个 docker 堆栈配置,其中包含一个名为 traefik
的覆盖网络。它包含我的 traefik
反向代理容器,然后是几个服务于各种子域的容器。我正在添加一个新的,它需要访问我在另一个容器中创建的数据库服务器,所以我添加了如下内容:
networks:
traefik:
driver: overlay
database:
driver: overlay
services:
traefik:
image: traefik
networks:
- traefik
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
# ...
# ...
database:
image: postgres:9.6-alpine # match what's being used by heroku
networks:
- database
staging:
image: staging
networks:
- traefik
- database
deploy:
labels:
traefik.enable: "true"
traefik.frontend.rule: Host:lotto-ticket.example.com
traefik.docker.network: traefik
traefik.port: 3000
当我这样做时,反向代理开始返回网关超时代码,表明 staging
容器不再可用于 traefik
网络。如果我从 staging
容器中删除 database
网络,子域会按预期提供服务(尽管它显然无法访问数据库),当我重新添加它时,反向代理开始获取超时。
这两个网络之间是否存在某种冲突?我是否需要配置 IP 路由才能在单个容器上使用多个 docker 网络?
编辑:在配置摘录中添加了更多详细信息
您需要使用标签 traefik.docker.network
告诉 traefik 在哪个网络上连接到您的服务。在您的情况下,该标签将设置为 ${stack_name}_traefik
,其中 ${stack_name}
是您的堆栈的名称。