Docker compose docker compose中的网络可见性

Docker compose docker compose中的网络可见性,docker-compose,docker-networking,Docker Compose,Docker Networking,我已经构建了一个docker compose,它包含3个服务:db,nginx,selenium。 使用nginx托管的应用程序与数据库(nginxdb)和selenium测试应用程序(selenium->App)进行通信 版本:“3” 服务: nginx: 图像:/nginx ... db: 图像:/db #移除暴露端口3306后,nginx无法与db通信 端口: - "3306:3306" ... 硒: 图片:joyzoursky/python chromedriver:3.8-seleni

我已经构建了一个docker compose,它包含3个服务:
db
nginx
selenium
。 使用nginx托管的应用程序与数据库(
nginx
db
)和selenium测试应用程序(
selenium
->
App
)进行通信

版本:“3”
服务:
nginx:
图像:/nginx
...
db:
图像:/db
#移除暴露端口3306后,nginx无法与db通信
端口:
- "3306:3306"
...
硒:
图片:joyzoursky/python chromedriver:3.8-selenium
命令:“bash seleniumScript.sh”
取决于:
-nginx
-分贝
我使用
docker compose run selenium
当我暴露数据库端口时,一切正常,但当我停止暴露端口3306时,nginx无法与db通信

我的理解是,一个docker compose设置中的所有服务都会自动连接,用户不需要创建任何其他网络,但我显然错了

我的问题是如何设置服务之间的暴露端口,而不将它们暴露给主机

更新: 我的nginx应用程序已将数据库主机配置为服务名称
db
。Selenium脚本设置使用
db
主机填充数据库,并通过
https://nginx
url

这里有一个非常相似的问题

nginx容器可能无法访问数据库容器,因为您正在通过docker主机访问它

同一网络中的容器始终可以在不公开任何端口但使用主机名的情况下相互访问。请参阅:。这意味着您可以使用
db:3306
从nginx容器内部连接到数据库容器


默认情况下,如果不想阻止某些容器相互通信,就不必创建任何新网络。

我的设置目标是不公开任何内容。我想要CI测试的隔离环境,在测试完成后,我想要摆脱容器。总之,所有容器都应该通过主机名
db
nginx
selenium
?您的建议是,我可能对docker主机有一些未解决的依赖关系
localhost
?或者,如果我在
db
中公开端口,它会通过
nginx
localhost以某种方式可见吗?我已经更新了答案以澄清。您理解正确:我认为您对docker主机有一个未解决的依赖关系,同一网络中的所有容器都可以相互通信,但您应该/需要为可预测的主机名设置固定的容器名。好的,因此我需要找到此依赖关系以进行确认。我的应用程序数据库连接设置使用了
db
。您确定要在端口3306上连接到
db
?我发现了问题,我的nginx应用程序缓存了配置更改,它是通过docker主机名(而不是localhost)访问应用程序的。谢谢,因为这个答案,我把一些事情弄清楚了。