2017-04-18 112 views
0

我正在嘗試使用docker stack部署來部署節點應用程序。我想這應該是顯而易見的,但是如何從節點應用程序連接到數據庫?如何連接到Docker堆棧部署中的容器

這是我的示例碼頭文件 - 我還沒有解決縮放每個服務,只是試圖連接的一切。鑑於這個文件,如果我docker stack deploy --compose-file docker-compose.yml dev - 那麼連接字符串連接節點到mongo的正確的mongo地址是什麼?

version: '3' 

services: 
    node: 
    image: rgilling/rsc:latest 
    ports: 
     - "8080:8080" 
    networks: 
     - "core" 
     - "front" 
    logging: 
     driver: "json-file" 
     options: 
     max-size: "500k" 
     max-file: "10" 
    db1: 
    image: mongo:latest 
    ports: 
     - "27017:27017" 
    command: mongod 
    networks: 
     - core 
    logging: 
     driver: "json-file" 
     options: 
     max-size: "500k" 
     max-file: "10" 
    search1: 
    image: docker.elastic.co/elasticsearch/elasticsearch:5.3.0 
    environment: 
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
    ulimits: 
     memlock: 
     soft: -1 
     hard: -1 
     nofile: 
     soft: 65536 
     hard: 65536 
    cap_add: 
     - IPC_LOCK 
    volumes: 
     - ../../elastic/config/search1.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
     - ../../elastic/config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties 
     - ../../elastic/logs/search1:/usr/share/elasticsearch/logs/search1 
     - ../../elastic/data/search1:/usr/share/elasticsearch/data/search1 
    ports: 
     - 9200:9200 
    networks: 
     - core 
    logging: 
     driver: "json-file" 
     options: 
     max-size: "500k" 
     max-file: "2" 
    kibana: 
    image: docker.elastic.co/kibana/kibana:5.3.0 
    hostname: test-rep 
    volumes: 
     - ../../kibana/config/systest.yml:/usr/share/kibana/config/kibana.yml 
    networks: 
     - core 
    ports: 
     - "5601:5601" 
    depends_on: 
     - search1 
    logging: 
     driver: "json-file" 
     options: 
     max-size: "500k" 
     max-file: "10" 
    mail: 
    image: mailhog/mailhog 
    hostname: test-mail 
    networks: 
     - core 
    ports: 
     - "8025:8025" 
     - "1025:1025" 
    logging: 
     driver: "json-file" 
     options: 
     max-size: "500k" 
     max-file: "10" 
networks: 
    core: 
    driver: overlay 
    front: 
    driver: overlay 

回答

-1

碼頭工人將爲每個容器創建一個網絡可訪問的名稱。在你的情況下,它將是db1

mongodb://user:[email protected]/my-database

,你還可以添加links部分,將泊塢窗,撰寫,它可以讓你指定一個名稱映射到db1

https://docs.docker.com/compose/compose-file/#links


node: 
    links: 
    - db1:mongo-server-name 

它通常是最好反正添加links部分,所以搬運工知道哪些容器都應該相互連接。


node: 
    links: 
    - db1 

沒有必要在這種情況下,重命名。只是指定node連接到

+0

我有一些無關的問題阻止了我進行測試,但是當我運行堆棧部署時,它會說:「忽略不支持的選項:cap_add,鏈接」 - 您確定鏈接適用於堆棧部署嗎? –

+0

沒關係,我得到它的工作。對於任何感興趣的人來說,地址確實是db1,但我不認爲「鏈接」可用於堆棧部署。有一種稱爲路由網格的服務,將地址路由到任何運行該服務的容器(在自動調節的情況下)。我還沒有嘗試過像使用dns那樣更高級的東西,但是也許在docker-compose中使用'hostname'選項仍然可以用於堆棧部署 - 我沒有嘗試過。 –

+0

錯誤的答案,正如文檔所述:'鏈接不支持docker stack部署或部署密鑰.' –

1

以上答案其實是錯誤的links:不搬運工棧支持部署 看到這個鏈接的容器:https://docs.docker.com/compose/compose-file/#not-supported-for-docker-stack-deploy

您可以通過使用連接容器的服務名稱連接到另一個容器在假設兩個服務mysql_service和java_service的羣在羣運行,則java_service容器內嘗試ping mysql_service以驗證它是否連接

,或者您可以使用別名來有一個替代的主機名稱服務網絡

https://docs.docker.com/compose/compose-file/#aliases

0

如果通過docker stack deploy運行的應用程序中 - 一個服務的所有容器都可以看到對方。

因此,對於您的情況下連接到數據庫,你應該這樣寫:

db1:27017

(其中DB1 - 是你的數據庫容器名稱)

https://docs.docker.com/compose/compose-file/#deploy

相關問題