Docker 容器连接 MySQL 出现 “Can't connect to MySQL server on 'localhost'” 错误的解决方式

阅读时长 5 分钟读完

问题描述

在使用 Docker 部署应用程序时,经常会遇到需要连接 MySQL 数据库的情况。但有时候在容器内部连接 MySQL 时,会出现以下错误信息:

这个错误通常是由于 Docker 容器内部无法连接到 MySQL 服务器所导致的。这篇文章将介绍如何解决这个问题。

解决方式

1. 检查 MySQL 服务是否在运行

首先,需要检查 MySQL 服务是否在运行。在 Linux 系统中,可以使用以下命令检查 MySQL 服务是否在运行:

如果 MySQL 服务没有运行,可以使用以下命令启动 MySQL 服务:

2. 确认 MySQL 服务绑定的 IP 地址

如果 MySQL 服务在运行,还需要确认 MySQL 服务绑定的 IP 地址是否正确。在 MySQL 配置文件中,可以设置 MySQL 服务绑定的 IP 地址。如果 MySQL 服务绑定的 IP 地址不正确,容器内部连接 MySQL 时就会出现上述错误。

在 Linux 系统中,MySQL 配置文件通常位于 /etc/mysql/mysql.conf.d/mysqld.cnf。可以使用以下命令编辑 MySQL 配置文件:

在 MySQL 配置文件中,找到以下行:

127.0.0.1 修改为 0.0.0.0,表示 MySQL 服务可以绑定到任何可用的 IP 地址:

保存并退出 MySQL 配置文件。

3. 确认 MySQL 用户名和密码是否正确

如果 MySQL 服务在运行且绑定的 IP 地址正确,还需要确认连接 MySQL 的用户名和密码是否正确。可以使用以下命令连接 MySQL:

其中,<username> 是 MySQL 的用户名。运行该命令后,会提示输入密码。如果输入的用户名或密码不正确,连接 MySQL 时就会出现错误。

4. 确认 Docker 容器网络是否正确配置

如果以上步骤都没有解决问题,那么需要确认 Docker 容器网络是否正确配置。在 Docker 中,可以使用以下命令创建一个与 MySQL 服务器在同一网络中的容器:

其中,<container-name> 是容器的名称,<network-name> 是网络的名称,<image-name> 是容器使用的镜像名称。

在容器内部连接 MySQL 时,可以使用 MySQL 服务所在容器的名称或 IP 地址。例如,如果 MySQL 服务所在容器的名称为 mysql-container,可以使用以下命令连接 MySQL:

如果 MySQL 服务所在容器的 IP 地址为 172.10.10.10,可以使用以下命令连接 MySQL:

示例代码

以下是一个 Docker Compose 文件的示例,该文件包含一个 MySQL 服务和一个 Node.js 应用程序:

-- -------------------- ---- -------
-------- ---
---------
  ---
    ------ ------------
    -------- ------
    ------------
      -------------------- -------
    ------
      - -----------
  ----
    ------ -
    -------- ------
    -----------
      - --
    ------------
      -------- --
      -------- ----
      ------------ -------
    ------
      - -----------

在上述 Docker Compose 文件中,MySQL 服务使用 mysql:latest 镜像,Node.js 应用程序使用当前目录下的 Dockerfile 构建镜像。在 Node.js 应用程序中,使用 DB_HOST: db 环境变量指定 MySQL 服务所在容器的名称,使用 DB_USER: rootDB_PASSWORD: example 环境变量指定 MySQL 的用户名和密码。

在 Node.js 应用程序中,可以使用以下代码连接 MySQL:

-- -------------------- ---- -------
----- ----- - -----------------

----- ---------- - ------------------------
  ----- --------------------
  ----- --------------------
  --------- ------------------------
---

------------------------ -- -
  -- ----- -
    -------------------- ----------- - - -----------
    -------
  -

  ---------------------- -- -- - - ---------------------
---

总结

本文介绍了 Docker 容器连接 MySQL 出现 “Can't connect to MySQL server on 'localhost'” 错误的解决方式。如果遇到这个错误,可以先检查 MySQL 服务是否在运行,确认 MySQL 服务绑定的 IP 地址是否正确,确认 MySQL 用户名和密码是否正确,最后确认 Docker 容器网络是否正确配置。通过这些步骤,可以解决 Docker 容器连接 MySQL 出现的错误。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/657faabfd2f5e1655da857d7

纠错
反馈