docker中的mysql变更宿主机映射端口
如果你的mysql有绑定宿主机的映射券
"Mounts": [ { "Type": "bind", "Source": "/data/docker-data/mysql/conf", "Destination": "/etc/mysql", "Mode": "", "RW": true, "Propagation": "rslave" }, { "Type": "bind", "Source": "/data/docker-data/mysql/data", "Destination": "/var/lib/mysql", "Mode": "", "RW": true, "Propagation": "rslave" }
新的 MySQL 容器启动命令
请先将你的 <你的root密码>
和 <tag>
(如 8.0
, 5.7
)替换为实际值。
bash
docker run -d \--name mysql \-p 13066:3306 \-v /data/docker-data/mysql/data:/var/lib/mysql \-v /data/docker-data/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=<你的root密码> \-e TZ=Asia/Shanghai \--restart=unless-stopped \mysql:<tag>
命令逐行说明:
docker run -d
: 启动一个容器并在后台 (-d
) 运行。--name mysql
: 为容器命名为mysql
,方便管理。你可以根据需要修改。-p 13066:3306
: 核心修改。将宿主机的 13066 端口映射到容器内的 3306 端口。-v /data/docker-data/mysql/data:/var/lib/mysql
: 数据目录挂载。确保新容器使用完全相同的数据路径,所有数据库数据都在这里。-v /data/docker-data/mysql/conf:/etc/mysql
: 配置目录挂载。确保你的自定义配置(如my.cnf
)会被继承。-e MYSQL_ROOT_PASSWORD=<你的root密码>
: 设置 root 用户的密码。请务必使用旧容器的相同密码。-e TZ=Asia/Shanghai
: (可选,但建议) 设置容器时区,保证数据库时间准确。--restart=unless-stopped
: (可选,但建议) 设置 Docker 服务重启时,这个容器自动启动。mysql:<tag>
: 指定 MySQL 镜像版本,请保持与之前一致(例如mysql:8.0
)。
完整操作步骤(请按顺序执行)
停止并移除旧容器(数据是安全的,因为已经挂载到宿主机)
bash
docker stop mysql docker rm mysql
使用新命令启动容器
将上面生成的命令复制粘贴到终端执行。验证是否成功
查看容器状态和端口映射:
bash
docker ps
你应该能看到
0.0.0.0:13066->3306/tcp
的字样。使用新端口连接数据库,验证数据和配置:
bash
# 通过新端口连接 mysql -h 127.0.0.1 -P 13066 -u root -p
连接成功后,检查你的数据库和表是否完好。
⚠️ 重要提醒
密码一致性:确保
MYSQL_ROOT_PASSWORD
环境变量的值和之前容器使用的密码完全一致,否则无法用原密码登录。目录权限:首次在新容器启动时,请确认宿主机上的
/data/docker-data/mysql/data/
目录对于 Docker 的进程是可读可写的。如果启动失败,可以查看日志docker logs mysql
,常见问题是目录权限不足。防火墙:如果服务器有防火墙,记得开放新的 13066 端口。
这个操作不会对你的现有数据造成任何影响,只是换了一个端口来访问同一个数据库。
注意 root密码如果有特殊字符,要用单引号
docker run -d \
--name prod-mysql \
-p 13066:3306 \
-v /data/docker-data/mysql/data:/var/lib/mysql \
-v /data/docker-data/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD='aa$1839' \
-e TZ=Asia/Shanghai \
--restart=unless-stopped \
mysql:5.7
完整操作步骤:
停止并删除旧容器(如果还在运行):
bash
docker stop mysql docker rm mysql
使用修正后的命令启动新容器:
bash
docker run -d \--name mysql \-p 13066:3306 \-v /data/docker-data/mysql/data:/var/lib/mysql \-v /data/docker-data/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD='aa$1839' \-e TZ=Asia/Shanghai \--restart=unless-stopped \mysql:5.7
验证启动是否成功:
bash
docker ps docker logs mysql # 查看启动日志,确认没有错误
测试新端口连接:
bash
mysql -h 127.0.0.1 -P 13066 -u root -p
然后在提示符下输入密码
aa$1839
进行连接测试。