单个容器上有多个docker网络

时间:2019-07-06 00:01:28

标签: docker docker-networking docker-stack

我有一个名为traefik的覆盖网络的docker堆栈配置。它包含我的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网络。如果我从database容器中删除了staging网络,则该子域将按预期运行(尽管它显然无法访问数据库),并且当我重新添加它时,反向代理开始获取超时。

两个网络之间是否存在某种冲突?我是否需要配置IP路由才能在单个容器上使用多个Docker网络?

编辑:在配置摘录中添加了更多细节

1 个答案:

答案 0 :(得分:2)

您需要使用标签traefik.docker.network告诉traefik在哪个网络上连接到您的服务。对于您而言,该标签将设置为${stack_name}_traefik,其中${stack_name}是堆栈的名称。