要将正在运行的 MySQL Docker 容器映射到宿主机的 3307 端口,需重新创建容器并指定端口映射。以下是详细操作步骤:
🔧 操作步骤
1. 停止并删除旧容器
# 停止容器
docker stop mysql_57_container
# 删除容器(注意:删除前确保数据已通过卷持久化)
docker rm mysql_57_container
2. 重新运行容器并映射端口
docker run -d --name mysql_57_container -p 3307:3306 -e MYSQL_ROOT_PASSWORD=your-password -v /path/to/mysql/data:/var/lib/mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run -d \
--name mysql_57_container \
-p 3307:3306 \ # 关键:将宿主机的3307映射到容器的3306
-e MYSQL_ROOT_PASSWORD=your_password \ # 设置root密码(替换 your_password)
-v /path/to/mysql/data:/var/lib/mysql \ # 挂载数据卷(替换 /path/to/mysql/data)
mysql:5.7 \
--character-set-server=utf8mb4 \ # 可选:设置字符集
--collation-server=utf8mb4_unicode_ci
📝 参数说明
-
-p 3307:3306
宿主机的3307
端口映射到容器的3306
端口(MySQL默认端口)。 -
-v /path/to/mysql/data:/var/lib/mysql
将容器内的 MySQL 数据目录挂载到宿主机,避免容器删除后数据丢失。 -
-e MYSQL_ROOT_PASSWORD=your_password
设置 MySQL root 用户的密码(必须配置)。
✅ 验证操作
1. 检查容器运行状态
docker ps -f name=mysql_57_container
应看到 0.0.0.0:3307->3306/tcp
的端口映射信息。
2. 测试 MySQL 连接
# 通过宿主机IP连接
mysql -h 127.0.0.1 -P 3307 -u root -p
输入密码后若成功进入 MySQL Shell,表示映射成功。
🔥 常见问题处理
问题 1:端口冲突
错误提示:Bind for 0.0.0.0:3307 failed: port is already allocated
解决方案:
# 查找占用3307端口的进程
sudo lsof -i :3307
# 杀死占用进程(谨慎操作)
sudo kill -9 <PID>
问题 2:防火墙拦截
现象:本地可连接,但外部无法访问
解决方案:
# 开放3307端口(以firewalld为例)
sudo firewall-cmd --zone=public --add-port=3307/tcp --permanent
sudo firewall-cmd --reload
问题 3:数据卷权限错误
错误提示:mysqld: Can't create/write to file '/var/lib/mysql/is_writable'
解决方案:
# 赋予宿主机数据目录权限
sudo chmod -R 777 /path/to/mysql/data
📌 关键注意事项
-
数据持久化:
务必通过-v
挂载数据目录,否则容器删除后所有数据会丢失。 -
安全建议:
-
避免使用弱密码
-
生产环境建议限制访问IP(通过
-p 192.168.1.100:3307:3306
绑定特定IP)
-
-
版本兼容性:
若需升级 MySQL 版本,直接修改镜像标签(如mysql:8.0
)并重新运行容器。
通过以上步骤,你的 MySQL 服务将通过 3307 端口 对外提供服务。
IT技术交流: