[英]How do I setup two docker containers, such that they can see each other?
我為docker-compose
定義了兩個服務
version: '3'
services:
celery:
build:
context: .
dockerfile: ./docker/celery/Dockerfile
command: celery -A api.tasks worker -l info
rabbitmq:
image: "rabbitmq:3-management"
ports:
- "5672:5672"
- "15672:15672"
hostname: "0.0.0.0"
我可以啟動第一個服務
docker-compose run --service-ports rabbitmq
一切正常。 我可以 ping 並連接到端口 5672 以與主機 os 進行通信。
$ curl 0.0.0.0:5672
AMQP
但是,第二個服務無法看到該端口。 以下命令錯誤,因為它無法連接到 0.0.0.0:5672。
docker-compose run --service-ports celery
如何設置兩個 docker 容器,以便它們可以相互看到?
從Docker容器內部,環回地址0.0.0.0引用容器本身。 使用主機的IP地址到達其他容器。
以下是有關如何從容器內部訪問主機以及Docker提供的各種網絡模式的詳細說明: https : //stackoverflow.com/a/24326540/417866
另一種方法是創建一個Docker網絡,將兩個容器連接到它,然后他們就能夠在該網絡上相互解析。 詳情請訪問: https : //docs.docker.com/engine/reference/commandline/network_create/
@ArashMotamedi如果你是對的,那么他也無法從主機連接到rabbitmq
,不是嗎?
@AndreiCioara我認為您的docker docker-compose
很好,問題在於命令 - 因為默認情況下--service-ports <service>
docker-compose run
並不打開任何端口,除非您使用--service-ports <service>
指定它們實際執行的操作,但僅限於對於一次一個服務,因此當您docker-compose run --service-ports celery
時, rabbitmq
端口關閉。
除非你有充分的理由使用run
(例如覆蓋命令或避免端口沖突),我建議你使用常規
docker-compose up
所以簡單的答案就是通過名字互相引用。 在您的撰寫文件中,您引用了兩個服務:
如果您使用docker-compose up -d(或只是docker-compose up),它將在他們共享的新創建的網絡上創建新容器。 Docker compose然后通過自動別名將兩個服務注冊到該網絡的DNS服務。
所以從芹菜中,您可以通過以下方式ping rabbitmq:
ping rabbitmq
和rabbitmq你可以通過ping celery
這適用於所有網絡通信,因為它只是名稱解析。 您可以通過創建新網絡,將它們分配給主機,然后注冊別名來手動完成所有操作,但是docker-compose可以完成所有工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.