在Docker Compose中自动创建网络

在Docker Compose中自动创建网络,docker,networking,automation,docker-compose,Docker,Networking,Automation,Docker Compose,在Docker like中使用自定义网络时 networks: default: external: name: service-tier 试着运行它,我得到了错误 错误:网络服务层声明为外部,但无法 建立请使用docker network create手动创建网络 服务层,然后重试 是否可以使用docker compose自动创建网络,或者除了先手动创建网络之外没有其他方法?外部是使用现有网络。如果您想创建网络,只需执行以下操作: networks: networ

在Docker like中使用自定义网络时

networks:
  default:
    external:
      name: service-tier
试着运行它,我得到了错误

错误:网络服务层声明为外部,但无法 建立请使用
docker network create手动创建网络
服务层
,然后重试


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

外部
是使用现有网络。如果您想创建网络,只需执行以下操作:

networks:
  network1:
  network2:
。。指导撰写制作网络。它们将被命名为
-
使用
docker network ls
验证创建

也可以替代默认网络或指定更多属性

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 1450
。。将覆盖默认网络设置MTU至1450(当主机MTU低于1500 MTU且路径MTU发现无法正常工作时,此设置非常方便)。有

external
在您希望两个compose设置中的服务相互通信或者您有一个手动创建的网络时更有意义。

正确地说,docker创建了所有提到的网络,因此以后可以通过运行另一个compose文件来引用这些网络

但是,默认生成的网络名称很难实际或健壮。因为它可能会很长,或者
docker
团队会改变他们对命名策略的看法

但是由于compose file version
3.5
(意思是
docker compose
version
1.18.0
)可以随意命名网络,因此总体解决方案更加健壮

请参阅以下演示如何实现此目的的片段:

编写文件1

版本:“3.5”
服务:
svc名称:
...                          
网络:
-特定网络名称
容器名称:“精确的容器引用”
...
网络:
特定网络名称:
外部:错误
名称:特定网络名称
编写文件2

版本:“2”
服务:
使用svc名称的svc:
...
网络:
-违约
-特定网络名称
外部链接:
-精确容器参考
...
网络:
特定网络名称:
外部:正确

运行以下命令:docker network create ddev_default

我也有此错误:

Network "NETWORK_NAME" needs to be recreated - option "driver" has changed

移除问题网络并重新创建后,一切正常

如何检查除驾驶台以外的驾驶员选项?指定com.docker.network.driver.mtu适用于网桥驱动程序,但不适用于macvlandriver@ealeon我猜唯一可以找的地方就是司机docs@Grimmy可以在docker compose up上创建持久性网络吗?原因发生在我身上的是,当我关闭容器时,docker compose也正在删除网络。默认情况下,ths
external
属性是否为false?@Stephane:是的,
docker compose
假设您将默认配置特定于项目的网络。通过指定外部
docker compose
不会尝试创建它,只是为了连接(并且在向下调用
时不会触碰它),这对我不起作用:第一个文件正确运行,但当运行第二个文件时,docker会响应声明为外部但找不到的“特定网络名称”。[已解决]:Docker compose将目录名添加到命名卷和网络,所以在第二个文件中,我必须将项目前缀添加到网络name@DomenicoMonaco:那么你可能做错了什么-检查你的docker版本,列出docker网络,检查正确的组合文件版本,您将看到网络名称的前缀不是任何目录名。我也可以假设你投了反对票吗?为什么——也许是因为你这方面的误解?祝您有个美好的一天。[编辑:]作为旁注,此设置是我们针对多个应用程序的生产模型,未经测试没有发布任何内容…这正是我想要的!谢谢!您还可以使用
docker network prune-f
删除任何未连接容器的网络。我有时会
dockerrm-f$(dockerps-a)
移除所有容器。然后是
docker network prune-f
,以删除未使用的网络
   docker network ls
   docker network rm NETWORK_NAME
   docker-compose up