MySQL 连接 Docker Compose 中的 MySQL 容器访问被拒绝,但是运行相同镜像的 Docker 容器没有问题


<!–

–>

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 容器。这里仅仅提供了一个示例,我们在具体应用中也需要根据实际情况进行配置。