为什么我必须在docker-compose.yml中两次声明网络状态?

时间:2019-05-01 13:56:54

标签: docker networking docker-compose

我有点困惑。在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创建一个网络,该网络是相同的吗?

这里有些困惑...

1 个答案:

答案 0 :(得分:1)

顶级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,才知道您要使用现有网络。