尝试建立一个有效的模式,允许我的所有服务之间进行通信,并允许同时在多个服务上进行本地开发。我目前正在使用docker compose为我的应用程序设置本地开发。我的docker-compose.yml
的基本想法看起来像这样。
version: '3'
services:
web:
<web_config>
worker:
<worker_config>
service-a:
我在质疑如何处理service-a
。
service-a
。因此,如果我同时运行此应用程序和另一个应用程序,他们都需要与service-a
进行通信。
service-a
应该在自己的撰写实例中运行吗?如果是,networks
是我的所有应用与service-a
通信的最佳方式吗?根据我的理解,这曾经是links
的工作,但现在首选networks
。我已经尝试使用network_mode
主机运行,但遇到了问题,因为我使用的是Docker for Mac。
我已经看到了很多意见和解决方案,但我真的不确定哪种方法最好。我见过的一些解决方案包括:
network
并在他们自己的docker composes中单独运行network_mode: 'host'
并在我的主机上运行所有内容(可悲的是我无法正常工作)如果你碰到了这个并且有任何建议可以分享,请告诉我,谢谢!
答案 0 :(得分:2)
每个docker-compose为其管理的服务建立自己的网络。正如您所建议的那样,使用共享桥接网络将是确保在单独的docker-compose.yml中的每个不同服务堆栈能够彼此连接的最简单方法。
You can tell docker-compose to look for and use a pre-existing network。您可以使用docker network create
创建此网络,也可以在服务中指定它 - docker-compose.yml作为具有静态名称的自定义网络:
service-a docker-compose.yml
version: '3'
services:
service-a:
...
networks:
mynetwork:
driver: bridge
然后在您的其他docker-compose.yml文件中使用该网络。您需要在docker-compose.yml的顶级中指定网络,然后您可以告诉每个服务使用它:
其他一些docker-compose.yml
version: '3'
services:
web:
...
networks:
- mynetwork
networks:
mynetwork:
external:
name: mynetwork
我只建议第二个选项,因为你说任何其他应用程序都需要服务 - 无论如何都要运行。