要将正在运行的 MySQL Docker 容器映射到宿主机的 3307 端口

要将正在运行的 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

📌 关键注意事项

  1. 数据持久化
    务必通过 -v 挂载数据目录,否则容器删除后所有数据会丢失。

  2. 安全建议

    • 避免使用弱密码

    • 生产环境建议限制访问IP(通过 -p 192.168.1.100:3307:3306 绑定特定IP)

  3. 版本兼容性
    若需升级 MySQL 版本,直接修改镜像标签(如 mysql:8.0)并重新运行容器。


通过以上步骤,你的 MySQL 服务将通过 3307 端口 对外提供服务。

IT技术交流:

图片

找出网站正在使用的数据库并定位其容器映射宿主机端口通常需要以下几个步骤: 1. **查看Dockerfile或docker-compose.yml**:首先,检查应用相关的Dockerfile或docker-compose.yml文件,这里会列出容器启动时的数据卷挂载以及网络设置,可能会包含对数据库服务端口的引用。 2. **运行Docker命令**:使用`docker ps -a`命令获取所有容器的信息,特别是关注状态为`running`的容器,它们可能包含你需要的数据库服务。 ```bash docker ps -a --filter "name=<your-app-name>" ``` 3. **分析网络连接**:通过`docker inspect`命令获取特定容器的详细信息,查找其中的网络配置部分,可以看到`NetworkSettings.Ports`字段,它列出了容器暴露的端口及其映射宿主机端口。 ```bash docker inspect <container-id> ``` 4. **找到数据库链接**:在容器内部执行数据库查询命令(如`psql`, `mysql`等),或者查看日志文件,可以发现与数据库连接相关的URL或端口号,这通常是数据库的实际端口加上映射后的宿主机端口。 5. **检查环境变量或配置文件**:如果应用的配置文件(例如application.properties, .env等)也在容器内,那么可能在这些文件中能找到数据库连接字符串,那里通常包含了宿主机端口。 6. **确认端口转发规则**:如果使用了Docker Compose或Kubernetes等工具管理服务,还应检查是否有端口映射规则(比如`ports`或`hostPort`)。 完成以上步骤后,你应该能确定网站所使用的数据库服务以及它在宿主机上对应的端口。如果遇到问题,还需查阅具体的文档或应用代码来进一步定位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端组件开发

你的钟意将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值