簡體   English   中英

docker-compose服務和網絡

[英]docker-compose service and the network

試圖熟悉docker-compose版本2,實際上只是設置了2個可以相互發現的簡單節點集群

給定

.
|-- docker-compose.yml
|-- node1
|   `-- Dockerfile
|-- node2
|   `-- Dockerfile

和一個Dockerfile作為

FROM centos:centos6.6

和docker-compose.yml作為

version: '2'
services: 
   dn1: 
    build: ./node1/.
    hostname: dn1.foo.com
    command: tail -f /dev/null
   dn2: 
    build: ./node2/.
    hostname: dn2.foo.com
    command: tail -f /dev/null

在跑步

docker-compose up -d
docker exec -it test_dn1_1 bash
$ hostname
 dn1.foo.com
$ ping dn2.foo.com
 PING dn2.foo.com (23.x.x.122) 
$ ping dn1
 64 bytes from test_dn2_1.test_default (172.21.0.3) ....

默認情況下是否可以從容器中發現服務? 是啊 這里

我假設需要“鏈接”屬性才能使容器彼此了解。

我如何顯式配置docker-compose.yaml以使容器可以通過“主機名”相互發現? 已經嘗試了鏈接,但這也不起作用。

謝謝

我不確定我是否理解您的問題:使用docker-compose版本2時,就像您所做的那樣,當您調用docker-compose up -d將創建容器,並創建一個自定義網絡,服務的容器是部分。

從這個網絡內,容器通過他們的服務名稱訪問,並發現。

盡管這讓我感到困擾,但是我認為這是一個錯字:如果您像dn2那樣創建服務dn1dn2 ,並且處於目錄test ,那么您的容器應命名為test_dn1_1test_dn2_1而不是您編寫的test_dn1
不,我想這是一個錯字。

因此,您可以與docker network ls一起檢查是否創建了一個名為test_default的網絡,並且如果您運行docker network inspect test_default ,則會找到兩個容器。

現在,從test_dn1_1內部,您可以運行ping dn2 ,它應該可以解析。

暫無
暫無

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

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