簡體   English   中英

Docker撰寫圓形容器鏈接

[英]Docker Compose circular container linking

我正在嘗試用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 

您應該可以盡快使用以下解決方案。

圓形連接正在PR#1676中修復

就是他們如何解決這個問題。 簡單地說,他們將使容器能夠相互通信而不需要連接。 我已將更新添加到下面的Docker Compose文檔中:

撰寫網絡

默認情況下,Compose會為您的應用設置單個默認網絡。 服務的每個容器都加入默認網絡,並且可以通過服務名稱下的DNS發現。

注意:您的應用程序的網絡名稱與“項目名稱”相同,后者基於其所在目錄的名稱。請參閱CLI文檔以了解如何覆蓋它。

例如,假設您的應用程序位於名為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主機網絡接口上的端口8000從外部訪問它。

進一步閱讀實驗性Docker網絡API: https//github.com/docker/docker/blob/master/experimental/networking_api.md

現在使用v2 docker-compose文件定義,它們之間可以使用所有服務,而無需鏈接部分。

您可以直接向每個人(包括自身的服務)請求服務名稱。 因此,如果你想從cs向vbc提出請求,你只需要curl vbc

也可以使用自定義域名定義服務,在docker-compose文件的服務部分中聲明hostname密鑰。

如果你想看到更多,網絡api不再是實驗性的: https//github.com/docker/compose/blob/master/docs/networking.md

這是v2中的docker-compose文件,沒有不必要的鏈接:

version: '2'

services:
  elasticsearch:
    build: ./compute/containers/elasticsearch/elasticsearch
    ports:
      - "9200:9200"
    environment:
      - PROJECT_ID=localhost
  nginx:
    build: ./compute/containers/elasticsearch/nginx
    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/
    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/
    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/
    ports:
      - "8083:8083"
      - "9083:9083" 
    volumes:
     - /Users/source/SR/src:/src
     - /Users/source/SR/data:/data 

它在您的鏈接中:

sr requires aa
aa requires vbc
vbc requires sr
sr requires aa

sr requires cs
sr requires vbc
vbc requires sr
vbc requires cs

你可以看到這是循環的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM