Docker撰写圆形容器链接

Jes*_*sse 12 docker boot2docker fig docker-compose

我正在尝试用docker来集成我们的开发环境.这包括Google Appengine项目的混合以及最终在容器化vm内的Google Compute引擎中托管的服务.

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

我在docker-compose中遇到错误,它检测到容器之间的循环依赖关系.

cs和vbc以及aa和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 
Run Code Online (Sandbox Code Playgroud)

tac*_*aco 8

您应该可以尽快使用以下解决方案.

圆形连接正在PR#1676中修复

就是他们如何解决这个问题.简单地说,他们将使容器能够相互通信而不需要连接.我已将更新添加到下面的Docker Compose文档中:

撰写网络

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

注意:您的应用程序的网络名称与"项目名称"相同,后者基于其所在目录的名称.请参阅CLI文档以了解如何覆盖它.

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

web:
  build: .
  ports:
    - "8000:8000"
db:
  image: postgres
Run Code Online (Sandbox Code Playgroud)

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

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

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

因为web显式映射端口,所以也可以通过Docker主机网络接口上的端口8000从外部访问它.

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

  • 真棒,期待尝试这一点! (2认同)