MySQL 修改宿主机端口映射

在使用 Docker 部署 MySQL 时,默认情况下 MySQL 容器的端口是绑定在宿主机的 3306 端口上的。但是有时候我们可能需要修改宿主机端口的映射,以便满足特定的需求。本文将介绍如何修改 MySQL 宿主机端口映射,并提供相应的代码示例。

为什么需要修改宿主机端口映射?

通常情况下,我们使用 MySQL 客户端连接数据库时会使用默认的 3306 端口。但是如果我们的宿主机上已经有其他服务在使用该端口,或者我们需要同时部署多个 MySQL 实例,那么我们就需要修改宿主机端口的映射,以避免端口冲突的问题。

修改宿主机端口映射的方法

修改 MySQL 宿主机端口映射的方法有两种:一种是在运行容器时指定端口映射,另一种是修改已经运行的容器的端口映射。下面将详细介绍这两种方法。

方式一:在运行容器时指定端口映射

在运行 MySQL 容器时,可以使用 -p 参数来指定端口映射,格式为 宿主机端口:容器端口。例如,下面的命令将把宿主机的 13306 端口映射到容器的 3306 端口上:

docker run -d -p 13306:3306 --name mysql-container mysql

方式二:修改已经运行的容器的端口映射

如果已经有一个运行中的 MySQL 容器,我们可以使用 docker container update 命令来修改容器的端口映射。以下是修改端口映射的步骤:

  1. 首先,使用以下命令查找 MySQL 容器的 ID:

    docker ps -f "name=mysql-container"
    

    这将列出所有名字包含 mysql-container 的容器,并显示容器的 ID。

  2. 然后,使用以下命令修改容器的端口映射,将宿主机的 13306 端口映射到容器的 3306 端口上:

    docker container update --publish-add 13306:3306 容器ID
    

    请将 容器ID 替换为实际的容器 ID。

示例代码

下面是一个使用 Docker Compose 配置 MySQL 容器并修改宿主机端口映射的示例:

version: '3'
services:
  mysql:
    image: mysql
    ports:
      - 13306:3306
    environment:
      MYSQL_ROOT_PASSWORD: your_password

通过运行以上的 Docker Compose 配置,可以创建一个 MySQL 容器,并将宿主机的 13306 端口映射到容器的 3306 端口上。同时,通过设置 MYSQL_ROOT_PASSWORD 环境变量,可以指定 MySQL 的 root 用户密码。

序列图

下面是使用 mermaid 语法绘制的修改宿主机端口映射的序列图:

sequenceDiagram
    participant User
    participant Docker_Client
    participant Docker_Daemon
    participant MySQL_Container

    User->>Docker_Client: docker run -d -p 13306:3306 --name mysql-container mysql
    Docker_Client->>Docker_Daemon: 创建容器
    Docker_Daemon->>MySQL_Container: 创建 MySQL 容器
    Docker_Daemon->>MySQL_Container: 指定端口映射为 13306:3306
    Docker_Daemon->>MySQL_Container: 启动容器
    MySQL_Container-->>Docker_Daemon: 容器已启动

    User->>Docker_Client: docker ps -f "name=mysql-container"
    Docker_Client->>Docker_Daemon: 查询容器信息
    Docker_Daemon-->>Docker_Client: 返回容器信息

    User->>Docker_Client: docker container update --publish-add 13306:3306 容器ID