mysql - 来自网关地址而不是源容器的 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
我使用的其他没有任何变化。
为什么我的环境开始出现这种情况?我是否应该更喜欢来自实际来源的连接,而不是通过网关?我怎样才能回到那种操作方式?
感谢您的任何指导或知识。
解决方案
对于遇到类似情况的其他人,我认为这是由于 Docker 从 Docker 自己的存储库升级18.03.1-ce
到18.06.1-ce
Docker 自己的存储库造成的。在此操作(目前)恢复对堆栈网络的意义之后执行服务器重新启动。
与我的 MySQL 容器的连接现在正确地来自 PHP/Apache 容器,而不是来自桥接网络的网关地址。这个引入的滞后已经消失,我可以删除与网关地址相关的特权。
推荐阅读
- javascript - 索引值不等于答案
- servicestack - ormlite 中的自定义引用命名约定
- python - 如何修复:horovod.run.common.util.network.NoValidAddressesFound
- oracle - 强制值为空时无法引发 VALUE_ERROR
- python-3.x - 有没有办法将位置元组作为属性添加到networkx中创建的节点?
- python - 使用终端运行 mpi4py 文件时出错
- html - 如何在顶部设置固定位置的导航标题
- c++ - 如何知道哪个库正在创建对共享库的依赖项
- scala - 具有唯一性的不可变协变集合
- javascript - 条件语句不适用于 VueJs 方法