gpt4 book ai didi

Docker Compose 循环容器链接

转载 作者:IT老高 更新时间:2023-10-28 12:45:16 24 4
gpt4 key购买 nike

我正在尝试使用 docker 将我们的开发环境容器化。这包括 Google Appengine 项目以及最终托管在容器化 vm 中的 Google Compute 引擎中的服务的组合。

我们当前的开发环境引导脚本在 boot2docker 中启动 elasticsearch 和 nginx,其他应用程序在 dev_appserver appengine 沙箱内的 localhost:{product port} 上运行。事实证明,这个过程很难管理和维护,因为它需要深入了解我们的应用程序如何通信。

我在 docker-compose 检测到容器之间的循环依赖时遇到错误。

Circular import between cs and vbc and aa and sr.

由于此配置仅适用于开发环境 (mac osx),在将所有产品套件依赖项链接在一起时,是否有人对采用不同方法提出建议或想法。

docker-compose.yml 的一部分:

elasticsearch:
build: ./compute/containers/elasticsearch/elasticsearch
ports:
- "9200:9200"
environment:
- PROJECT_ID=localhost
nginx:
build: ./compute/containers/elasticsearch/nginx
links:
- elasticsearch:localhost
ports:
- "9201:9201"
cs:
build: ./CS
command: dev_appserver.py /src/ --host=0.0.0.0 --admin_host=0.0.0.0 --port=8080 --admin_port=9080 --storage_path=/data/
ports:
- "8080:8080"
- "9080:9080"
volumes:
- /Users/source/CS/src:/src
- /Users/source/CS/data:/data
aa:
build: ./AA
command: dev_appserver.py /src/ --host=0.0.0.0 --admin_host=0.0.0.0 --port=8081 --admin_port=9081 --storage_path=/data/
links:
- vbc:vbc-local
- st:st-local
- elasticsearch:localhost
ports:
- "8081:8081"
- "9081:9081"
volumes:
- /Users/source/AA/src:/src
- /Users/source/AA/data:/data
vbc:
image: google/cloud-sdk
command: dev_appserver.py /src/ --host=0.0.0.0 --admin_host=0.0.0.0 --port=8082 --admin_port=9082 --storage_path=/data/
links:
- cs:cs-local
- sr:sr-local
- sm:sm-local
- ms:ms-local
- st:st-local
- cis:cis-local
- elasticsearch:localhost
ports:
- "8082:8082"
- "9082:9082"
volumes:
- /Users/source/VBC/src:/src
- /Users/source/VBC/data:/data
sr:
build: ./SR
command: dev_appserver.py /src/ --host=0.0.0.0 --admin_host=0.0.0.0 --port=8083 --admin_port=9083 --storage_path=/data/
links:
- cs:cs-local
- aa:aa-local
ports:
- "8083:8083"
- "9083:9083"
volumes:
- /Users/source/SR/src:/src
- /Users/source/SR/data:/data

最佳答案

您应该很快就可以使用以下解决方案了。

循环链接在 PR # 1676 中得到修复

This是他们如何解决这个问题。简而言之,它们将使容器能够在没有链接的情况下相互交谈。我在下面的 Docker Compose 文档中添加了更新:

Compose 中的网络

默认情况下,Compose 会为您的应用设置一个默认网络。服务的每个容器都加入默认网络,并且可以通过服务名称下的 DNS 发现。

Note: Your app's network is given the same name as the "project name", which is based on the name of the directory it lives in. See the CLI docs for how to override it.

例如,假设您的应用位于名为 myapp 的目录中,并且您的 docker-compose.yml 如下所示:

web:
build: .
ports:
- "8000:8000"
db:
image: postgres

当你运行 docker-compose up 时,会发生以下情况:

  1. 创建了一个名为 myapp 的网络。
  2. 使用 web 的配置创建容器。它以 web 的名称加入网络 myapp
  3. 使用 db 的配置创建容器。它以 db 的名称加入网络 myapp

现在每个容器都可以查找主机名 webdb 并取回相应容器的 IP 地址。例如,web 的应用程序代码可以连接到 URL postgres://db:5432 并开始使用 Postgres 数据库。

由于 web 显式映射了一个端口,因此也可以通过 Docker 主机网络接口(interface)上的端口 8000 从外部访问它。

进一步阅读实验性 Docker 网络 API: https://github.com/docker/docker/blob/master/experimental/networking_api.md

关于Docker Compose 循环容器链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29238608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com