[英]docker compose network version 3 – containers can't see each other unless using public IP?
[英]Why docker containers can't access each other by ip within one network?
我已經設置了 service_main流登錄套接字 127.0.0.1:6000
簡化的 docker-compose.yml 看起來像這樣:
version: "3"
networks:
some_network:
driver: bridge
ipam:
driver: default
config:
- subnet: 100.100.100.0/24
gateway: 100.100.100.1
services:
service_main:
image: someimage1
networks:
some_network:
ipv4_address: 100.100.100.2
service_listener:
image: someimage2
networks:
some_network:
ipv4_address: 100.100.100.21
entrypoint: some_app
command: listen 100.100.100.2:6000
我假設它應該工作,因為兩個容器都屬於一個網絡。
但是,我收到一個錯誤(來自 service_listener),即 100.100.100.2:6000 不可用(我認為該服務嘗試偵聽某些公共套接字而不是網絡。)
我嘗試了不同的方法,但沒有深入理解:在 service_main 上公開/發布 6000 端口,或將日志的套接字設置為 100.100.100.21:6000 並在 service_listener 中監聽 127.0.0.1:6000(也結束發布端口)。 但沒有任何作用。 顯然我不明白為什么。
在具有類似方法的同一網絡中 - powerdns 和 postgresql 工作正常 - 我在配置中告訴 powerdns db 主機在 100.100.100.x 上並且它可以工作。
這一切都取決於你想做什么
如果你想從外部訪問 service_main 就像運行容器的主機一樣,那么有兩種方法可以解決這個問題:
services:
service_main:
image: someimage1
ports:
- "6000:4000"
在這種情況下,端口 4000 是 someimage1 在 Docker 容器內運行的端口。
但是您需要確保您在 Docker 容器(someimage1)中運行的東西確實在端口 6000 上運行。
proxyserver 方法的好處是您可以在另一個 docker 容器中使用 nginx,並將所有部署和網絡內容放在那里。 (以我在 docker 中創建的代理服務器為例,無恥的自我推銷)
而且我總是將不可路由的網絡用於內部網絡,而不是 100.100.100.*
我假設當我發布/映射端口時 - 我使它不僅可用於 docker compose 網絡,還可用於外部調用。
我的問題已通過以下步驟解決:
service_listener:
image: someimage2
networks:
some_network:
ipv4_address: 100.100.100.21
entrypoint: some_app
command: listen 0.0.0.0:6000
它有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.