首页 > 解决方案 > 来自网关地址而不是源容器的 Docker MySQL 容器传入连接

问题描述

我在他们自己的用户定义网络上有一个基本的容器堆栈,子网为172.21.0.0/16. 我的 MySQL 容器的地址是172.21.0.2,PHP/Apache 容器的地址是172.21.0.3.

在此之前,我必须允许 MySQL 允许通过 PHP 的传入连接172.21.0.3,这非常有意义。现在,似乎连接来自172.21.0.1网关,这对我来说没有多大意义。我(从基本到中级)的理解表明,仅当流量的目的地是其本地网络之外的地址时才应使用网关 - 但显然在这种情况下 MySQL 和 PHP/Apache 位于同一网络上。

我们的两个环境已经开始出现这样的行为,虽然允许从网关地址进行连接是一个简单的修复,但我在不了解发生了什么以及为什么发生的情况下犹豫是否继续。这似乎也增加了应用程序中数据库查询的额外延迟。

通过 phpMyAdmin 登录受影响的环境会在“数据库服务器”信息窗格中显示“用户:root@172.21.0.1”。未受影响的环境显示“root@phpmyadmin_1.test_default”(user@[container].[network])。

两种环境都使用完全相同的镜像,以及相同版本的 Docker - 18.06.1-ce. 除了 Docker 的版本升级之外,docker-compose.yml我使用的其他没有任何变化。

为什么我的环境开始出现这种情况?我是否应该更喜欢来自实际来源的连接,而不是通过网关?我怎样才能回到那种操作方式?

感谢您的任何指导或知识。

标签: mysqldockernetwork-programming

解决方案


对于遇到类似情况的其他人,我认为这是由于 Docker 从 Docker 自己的存储库升级18.03.1-ce18.06.1-ceDocker 自己的存储库造成的。在此操作(目前)恢复对堆栈网络的意义之后执行服务器重新启动。

与我的 MySQL 容器的连接现在正确地来自 PHP/Apache 容器,而不是来自桥接网络的网关地址。这个引入的滞后已经消失,我可以删除与网关地址相关的特权。


推荐阅读