20

我有这样的 docker-compose.yml (这里不是完整列表):

version: '2'

services:

  nginx:
    build: ./nginx/
    ports:
      - 8080:80
    links:
      - php
    volumes_from:
      - app
    networks:
      app_subnet:
        ipv4_address: 172.16.1.3

  php:
    build: ./php/
    expose:
      - 9000
    volumes_from:
      - app
    networks:
      app_subnet:
        ipv4_address: 172.16.1.4

    networks:
      app_subnet:
        driver: bridge
        ipam:
        config:
          - subnet: 172.16.1.0/24
          gateway: 172.16.1.1

docker-compose up我收到这样的错误后:

仅当连接到具有用户配置子网的网络时,才支持用户指定的 IP 地址

所以我正在创建子网docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_subnet

但这并不能解决问题,因为 docker-compose 会即时创建名为 dev_app_subnet 的子网。而且我的子网没有使用 - 我遇到了同样的错误。这样做的主要目的是为 nginx 服务分配静态 IP - 从 etc/hosts 文件中打开我的项目 web url。

4

5 回答 5

30

[已解决]找到了解决方案。当指向网络时,我们应该使用标志“external”告诉 compose 网络已经创建并且应该被带到外部(否则它将使用项目前缀动态创建):

networks:
  app_subnet:
    external: true

因此,在此之后 docker-compose 会将容器附加到现有app_subnet 的子网之前必须创建:

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 app_subnet
于 2016-10-17T12:21:59.760 回答
9

在我的情况下,我第一次运行docker-compose up失败,但网络已经创建,可以看到 using docker network ls.

在这种情况下,只需docker-compose down,修复 yml,重新运行docker-compose up就可以了

于 2018-12-11T11:43:33.133 回答
6

从之前的脚本运行来看,可能已经创建了网络接口,但没有子网参数。

为了修复它运行

docker network ls -a

并删除阻止创建服务的网络

docker network rm <network interface id> 
于 2020-04-10T10:56:01.223 回答
0

具体来说,如果您使用 docker stack deploy 来部署 swarm 集群。您需要将子网的范围指定为“swarm”:

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 --scope swarm app_subnet

在 docker-compose.yml 中,您需要将外部网络指定为:

网络:默认:外部:名称:etl_subnet

将其用作默认值。

于 2017-07-15T08:54:31.157 回答
0

添加到秋实的答案中,您可以使用docker-compose 3.9版本来指定外部网络,如下所示。

version: "3.9"
networks:
  network1:
    external: true
    name: etl_subnet

参考:https ://docs.docker.com/compose/compose-file/compose-file-v3/#network-configuration-reference

于 2021-05-30T13:34:29.413 回答