[英]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.