我已經設定了其中 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 上并且它可以作業。
uj5u.com熱心網友回復:
這一切都取決于你想做什么
如果你想從外部訪問 service_main 就像運行容器的主機一樣,那么有兩種方法可以解決這個問題:
- 發布埠。這是通過 Ports 命令完成的:
services:
service_main:
image: someimage1
ports:
- "6000:4000"
在這種情況下,埠 4000 是 someimage1 在 Docker 容器內運行的埠。
- 使用與 Docker 容器的 IP 地址通信的 ProxyServer。
但是您需要確保您在 Docker 容器(someimage1)中運行的東西確實在埠 6000 上運行。
代理服務器
proxyserver 方法的好處是您可以在另一個 docker 容器中使用 nginx,并將所有部署和網路內容放在那里。(以我在 docker 中創建的代理服務器為例,無恥的自我推銷)
不可路由網路
而且我總是將不可路由的網路用于內部網路,而不是 100.100.100.*
uj5u.com熱心網友回復:
我假設當我發布/映射埠時 - 我使它不僅可用于 docker compose 網路,還可用于外部呼叫。
我的問題已通過以下步驟解決:
- 在 service_main 的配置中,我設定它應該將日志流式傳輸到套接字:100.100.100.21:6000
- 在 service_listener 中,我暴露了埠 6000 并告訴里面的應用程式監聽 0.0.0.0:6000 埠
service_listener:
image: someimage2
expose:
- "6000/tcp"
networks:
some_network:
ipv4_address: 100.100.100.21
entrypoint: some_app
command: listen 0.0.0.0:6000
它有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316328.html
標籤:码头工人 联网 docker-compose
上一篇:Docker僅在埠80上運行
下一篇:如何在Windows10上啟動時修復Docker錯誤System.InvalidOperationException?
