Docker Compose 中配置 MySQL 容器时遇到 "Unsupported config option" 的解决方法

阅读时长 4 分钟读完

在使用 Docker Compose 部署应用时,经常需要配置 MySQL 容器来存储数据。然而,在配置 MySQL 容器时,有时会遇到 "Unsupported config option" 的错误,导致容器无法启动。本文将介绍如何解决这个问题。

问题描述

在 Docker Compose 中配置 MySQL 容器时,常见的配置如下:

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

这个配置将会启动一个 MySQL 5.7 容器,将数据目录挂载到当前目录下的 data 目录,并将容器的 3306 端口映射到主机的 3306 端口。然而,当我们执行 docker-compose up 命令时,会遇到以下错误:

这个错误提示我们在 services.db 中使用了不支持的配置选项 ports,导致配置文件无效。

解决方法

Docker Compose 中的 MySQL 容器默认监听在容器内部的 3306 端口,而不是主机的端口。因此,我们需要使用容器间的网络来访问 MySQL 容器。

首先,我们需要在 docker-compose.yml 文件中定义一个网络:

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

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

在这个配置中,我们定义了一个名为 db-network 的网络,然后将 MySQL 容器添加到这个网络中。接下来,我们需要在其他服务中使用这个网络来访问 MySQL 容器。

例如,如果我们有一个 Node.js 服务需要连接 MySQL,我们可以这样配置:

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

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

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

在这个配置中,我们定义了一个名为 app 的服务,将它的 3000 端口映射到主机的 3000 端口,并将它添加到 db-network 网络中。现在,我们可以在 Node.js 服务中使用 db 这个主机名来连接 MySQL 容器:

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

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

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

在这个示例中,我们使用 db 主机名来连接 MySQL 容器,并指定了 MySQL 的用户名、密码和数据库名称。

结论

在 Docker Compose 中配置 MySQL 容器时,我们需要使用容器间的网络来访问 MySQL 容器,而不是将容器的端口映射到主机。通过定义一个网络,并将 MySQL 容器添加到这个网络中,我们可以在其他服务中使用容器的主机名来连接 MySQL 容器。这样,我们就可以避免 "Unsupported config option" 的错误,并成功部署应用程序。

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

纠错
反馈