端口冲突
数据卷问题
配置问题
镜像问题
资源限制
docker logs [容器ID或名称]
# 查看主机端口占用情况
netstat -tulnp | grep [端口号]
# 或
lsof -i :[端口号]
# 查看挂载目录权限
ls -ld [挂载目录]
# 确保MySQL用户(通常UID 999)有权限
sudo chown -R 999:999 [挂载目录]
# 使用最小配置启动测试
docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 查看Docker资源使用
docker stats
# 查看系统资源
free -h
df -h
Error response from daemon: driver failed programming external connectivity on endpoint mysql (xxxx): Bind for 0.0.0.0:3306 failed: port is already allocated
解决方案:
- 更改主机端口映射,如 -p 3307:3306
- 停止占用端口的服务
- 使用 docker ps
查找并停止冲突容器
[ERROR] [Entrypoint]: mysqld failed while attempting to check config
command was: mysqld --verbose --help
mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
解决方案:
sudo chown -R 999:999 [挂载目录]
sudo chmod -R 755 [挂载目录]
[ERROR] [Entrypoint]: Data directory (/var/lib/mysql) already exists and is not empty. This could be because you've already started MySQL previously with a different root password. To fix this, either delete the contents of the directory or specify a different data directory.
解决方案:
- 清空数据目录或指定新的数据目录
- 或添加 --force
参数强制使用(不推荐)
[ERROR] [Entrypoint]: MYSQL_ALLOW_EMPTY_PASSWORD is set but not MYSQL_ROOT_PASSWORD or MYSQL_RANDOM_ROOT_PASSWORD
解决方案: - 确保设置了必要的环境变量 - 示例正确启动命令:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:tag
docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -v /data/mysql:/var/lib/mysql -d mysql:5.7
docker logs mysql
sudo chown -R 999:999 /data/mysql
docker start mysql
通过以上步骤,大多数Docker MySQL启动问题都能得到有效解决。如问题仍然存在,建议查阅MySQL官方文档或Docker社区获取更详细的帮助。