docker-compose 中的网络可见性
Network visibility within docker-compose
我构建了一个 docker-compose,包含 3 个服务:db
、nginx
、selenium
。
使用 nginx 托管的应用程序与数据库通信 (nginx
<-> db
),selenium 测试应用程序 (selenium
-> app
).
version: '3'
services:
nginx:
image: <my_private_repo>/nginx
...
db:
image: <my_private_repo>/db
# nginx cannot communicate with db after I remove exposing port 3306
ports:
- "3306:3306"
...
selenium:
image: joyzoursky/python-chromedriver:3.8-selenium
command: "bash seleniumScript.sh"
depends_on:
- nginx
- db
我 运行 我用 docker-compose run selenium
测试
当我公开数据库端口时一切正常,但当我停止公开端口 3306 时,nginx 无法与 db 通信。
我的理解是一个 docker-compose 设置中的所有服务都是自动连接的,用户不需要创建任何额外的网络,但我显然错了。
我的问题是我应该如何设置在服务之间公开端口而不将它们暴露给主机?
更新:
我的 nginx 应用程序已将数据库主机配置为服务名称 db
。 Selenium 脚本设置使用 db
主机填充数据库并通过 https://nginx
url 测试 nginx 应用程序。
这里问的东西很相似。
nginx 容器可能无法访问数据库容器,因为您正在通过 docker 主机 localhost
.
访问它
同一网络中的容器始终可以相互访问而无需暴露任何端口,但使用主机名。参见:the docker docs。这意味着,您可以使用 db:3306
.
从 nginx 容器内部连接到数据库容器
默认情况下组合 creates a default network for the project,因此除非您想阻止某些容器相互通信,否则您不必创建任何新网络。
我构建了一个 docker-compose,包含 3 个服务:db
、nginx
、selenium
。
使用 nginx 托管的应用程序与数据库通信 (nginx
<-> db
),selenium 测试应用程序 (selenium
-> app
).
version: '3'
services:
nginx:
image: <my_private_repo>/nginx
...
db:
image: <my_private_repo>/db
# nginx cannot communicate with db after I remove exposing port 3306
ports:
- "3306:3306"
...
selenium:
image: joyzoursky/python-chromedriver:3.8-selenium
command: "bash seleniumScript.sh"
depends_on:
- nginx
- db
我 运行 我用 docker-compose run selenium
测试
当我公开数据库端口时一切正常,但当我停止公开端口 3306 时,nginx 无法与 db 通信。
我的理解是一个 docker-compose 设置中的所有服务都是自动连接的,用户不需要创建任何额外的网络,但我显然错了。
我的问题是我应该如何设置在服务之间公开端口而不将它们暴露给主机?
更新:
我的 nginx 应用程序已将数据库主机配置为服务名称 db
。 Selenium 脚本设置使用 db
主机填充数据库并通过 https://nginx
url 测试 nginx 应用程序。
nginx 容器可能无法访问数据库容器,因为您正在通过 docker 主机 localhost
.
同一网络中的容器始终可以相互访问而无需暴露任何端口,但使用主机名。参见:the docker docs。这意味着,您可以使用 db:3306
.
默认情况下组合 creates a default network for the project,因此除非您想阻止某些容器相互通信,否则您不必创建任何新网络。