<!–
MySQL 连接 Docker Compose 中的 MySQL 容器访问被拒绝,但是运行相同镜像的 Docker 容器没有问题
最近在使用 Docker Compose 部署一个应用程序时遇到了一个问题:在连接 容器时出现“访问拒绝”的错误信息,但当我直接用 Docker 运行相同的镜像时,却可以正常连接到 容器。
在仔细分析后,我发现这个问题与我的网络配置有关。
阅读更多:
(adsbygoogle = window.adsbygoogle || []).push({});
问题分析
首先,我检查了我的 Docker Compose 文件。我发现我使用了默认的网络配置,这意味着我的 MySQL 容器和应用程序容器应该可以在同一个网络中,应该可以相互通信。
我进一步检查了我的 Docker Compose 网络配置,发现我在网络配置中没有指定端口映射。这就意味着,应用程序容器无法直接连接 MySQL 容器。
然后,我检查了我的 Docker 镜像,发现我在运行 Docker 镜像时使用了 -p
参数,也就是将容器端口映射到主机端口。这意味着,在我运行 Docker 镜像时,MySQL 容器暴露了一个端口,允许我的应用程序容器连接到这个端口。
所以,我们可以得出结论:当我使用 Docker Compose 运行 MySQL 容器时,我的应用程序容器不能连接 MySQL 容器是因为我没有指定端口映射;当我用 Docker 直接运行 MySQL 容器时,我的应用程序容器可以连接到 MySQL 容器是因为我使用了 -p
参数将容器端口映射到主机端口。
解决方案
要解决这个问题,我需要在我的 Docker Compose 文件中添加端口映射配置,以允许我的应用程序容器连接到 MySQL 容器。具体来说,我需要在我的 Docker Compose 文件中添加以下配置:
services:
db:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
在这个配置中,我将 MySQL 容器的端口 3306
映射到主机端口 3306
上。因此,当我的应用程序容器连接到主机的 3306
端口时,它将被重定向到 MySQL 容器的 3306
端口。
(adsbygoogle = window.adsbygoogle || []).push({});
总结
在使用 Docker Compose 时连接 MySQL 容器出现“访问拒绝”的错误信息,但是用 Docker 直接运行相同的镜像中没有此问题。这可能是由于网络配置不当导致的。解决方案是在 Docker Compose 文件中添加端口映射配置,以允许应用程序容器连接 MySQL 容器。这里仅仅提供了一个示例,我们在具体应用中也需要根据实际情况进行配置。