Docker 使用覆盖网络进行堆栈部署 - 行为不一致
Docker stack deploy using overlay network - inconsistent behavior
我正在使用 docker-compose.yml 文件(Swarm 堆栈部署)将 2 个容器(应用程序和 SQL)部署到同一网络。
大多数时候,应用程序通过其主机名作为连接字符串中的数据源与 SQL 通信没有问题。
但是,有时它根本找不到它。为了调试它,我验证了覆盖网络确实在每个节点中创建,并且在检查每个节点上的网络时,我看到容器确实属于这个网络。
此外,当我 运行 docker exec
命令进入应用程序容器时,我尝试向 SQL 容器发送 ping,主机名确实解析为正确的IP,但仍然没有回应。
这非常令人沮丧,因为它只是偶尔发生。
关于如何调试问题的任何建议?
version: '3.2'
services:
sqlserver:
image: xxxx:5000/sql_image
hostname: sqlserver
deploy:
endpoint_mode: dnsrr
networks:
devnetwork:
aliases:
- sqlserver
test:
image: xxxx:5000/test
deploy:
endpoint_mode: dnsrr
deploy:
restart_policy:
condition: none
resources:
reservations:
memory: 2048M
networks:
- devnetwork
networks:
devnetwork:
driver: overlay
我正在使用 docker-compose.yml 文件(Swarm 堆栈部署)将 2 个容器(应用程序和 SQL)部署到同一网络。 大多数时候,应用程序通过其主机名作为连接字符串中的数据源与 SQL 通信没有问题。
但是,有时它根本找不到它。为了调试它,我验证了覆盖网络确实在每个节点中创建,并且在检查每个节点上的网络时,我看到容器确实属于这个网络。
此外,当我 运行 docker exec
命令进入应用程序容器时,我尝试向 SQL 容器发送 ping,主机名确实解析为正确的IP,但仍然没有回应。
这非常令人沮丧,因为它只是偶尔发生。 关于如何调试问题的任何建议?
version: '3.2'
services:
sqlserver:
image: xxxx:5000/sql_image
hostname: sqlserver
deploy:
endpoint_mode: dnsrr
networks:
devnetwork:
aliases:
- sqlserver
test:
image: xxxx:5000/test
deploy:
endpoint_mode: dnsrr
deploy:
restart_policy:
condition: none
resources:
reservations:
memory: 2048M
networks:
- devnetwork
networks:
devnetwork:
driver: overlay