使用docker容器
一、拉取 MySQL 容器
查找可拉取的Mysql版本
docker search mysql
拉取 MySql 容器
docker pull mysql:5.7
二、停止并删除当前容器(保留数据卷)
前提是:已经创建过mysql容器
docker stop mysql && docker rm mysql
三、重新创建容器(关键配置)
docker run -d --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql_data:/var/lib/mysql mysql:5.7
解释:
docker run -d --name mysql \
--restart=always \ # 容器退出时自动重启
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \ # 替换为你的密码
-v mysql_data:/var/lib/mysql \ # 命名卷持久化数据
mysql:latest # 或指定版本如 mysql:5.7
关键区别:
❌ 不要使用 --rm
✅ 必须添加 --restart=always
和 -v
数据卷
四、验证是否成功
1. 检查容器重启策略
docker inspect mysql --format='{{.HostConfig.RestartPolicy.Name}}'
- 应输出
always
(如果显示no
则配置失败)。
2. 测试容器自恢复
docker stop mysql && docker ps -a | grep mysql
- 几秒后容器应自动重启(状态从
Exited
变回Up
)。
执行到这可能出现问题,不执行这一步也是能用的:
解决步骤:
1️⃣ 查看容器状态
docker ps -a | grep mysql # 应显示状态为 "Up"
2️⃣ 重新启动容器
docker start mysql
五、常见问题处理
1. 如果之前没挂载数据卷怎么办?
- 数据可能已丢失,需重新初始化数据库。
- 未来务必使用
-v mysql_data:/var/lib/mysql
挂载数据。
2. 如何备份现有数据?
如果容器仍在运行但未挂载卷,临时备份数据:
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > mysql_backup.sql
3. 仍遇到权限问题?
# 确保数据卷目录可被 Docker 访问
sudo chown -R 999:999 /var/lib/docker/volumes/mysql_data
(999
是容器内 MySQL 用户的默认 UID)
六、最终效果
- 容器永不自动删除(无
AutoRemove
) - 崩溃后自动重启(
--restart=always
) - 数据永久保存(通过
mysql_data
卷)