在Docker Compose中自动创建网络

时间:2017-07-22 13:23:46

标签: docker networking automation docker-compose

在Docker中使用自定义网络时

networks:
  default:
    external:
      name: service-tier

尝试运行它,我收到了错误

  

错误:网络服务层声明为外部,但不能   找到。请使用docker network create service-tier手动创建网络,然后重试。

是否可以使用docker-compose自动创建网络,或者除了先手动创建网络之外别无其他方法吗?

4 个答案:

答案 0 :(得分:8)

external是使用现有网络。如果你想创建网络,你只需要做:

networks:
  network1:
  network2:

..指示撰写网络。它们将被命名为<compose-dir>-<network name>使用docker network ls验证创建。

您还可以覆盖默认网络或指定更多属性。

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 1450

..将覆盖默认网络设置MTU为1450(当主机低于1500 mtu且路径mtu发现无法正常工作时很方便)。有other bridge driver options

当您希望两个组合设置中的服务相互通信或者您手动创建网络时,

external更有意义。

答案 1 :(得分:5)

@Grimmy正确指出时,docker会创建所有提到的网络,因此可以稍后通过运行另一个撰写文件来引用这些网络。

但是,默认生成的网络名称几乎不具有实用性或健壮性。因为它可能会很长或docker团队改变他们对命名策略的看法。

但是,由于撰写文件版本3.5(意味着docker-compose版本1.18.0),可以将网络命名为喜欢,因此整体解决方案更加强大。

请参阅以下代码片段,了解如何实现此目标:

撰写文件1

version: '3.5'
services:
  svc-name:

    ...                          

    networks:
      - specific-network-name
    container_name: "exact-container-reference"

    ...

networks:
  specific-network-name:
    external: false
    name: specific-network-name

撰写文件2

version: '2'
services:

  svc-using-svc-name:

    ...

    networks:
      - default
      - specific-network-name
    external_links:
      - exact-container-reference

    ...

networks:
  specific-network-name:
    external: true

答案 2 :(得分:1)

我也有此错误:

Network "NETWORK_NAME" needs to be recreated - option "driver" has changed
   docker network ls
   docker network rm NETWORK_NAME
   docker-compose up

删除问题网络并重新创建之后,一切都很好。

答案 3 :(得分:0)

运行以下命令:docker network create ddev_default