这个错误通常发生在 Docker 容器中的 MySQL 服务尝试访问 /etc/mysql/conf.d/
目录时遇到权限问题或目录不存在。具体可能原因包括:
docker-compose.yml
中配置的 volume 挂载不正确在 docker-compose.yml
中正确配置 volumes:
services:
mysql:
image: mysql:latest
volumes:
- ./mysql/conf.d:/etc/mysql/conf.d
- mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: yourpassword
volumes:
mysql_data:
确保主机上的 ./mysql/conf.d
目录存在且可读:
mkdir -p ./mysql/conf.d
chmod -R 644 ./mysql/conf.d
如果目录已存在但权限不足:
# 在主机上执行
chown -R 999:999 ./mysql/conf.d # MySQL 容器通常使用 999:999 用户
chmod -R 755 ./mysql/conf.d
如果不需要自定义配置,可以完全移除 volumes 中关于 conf.d 的挂载:
services:
mysql:
image: mysql:latest
volumes:
- mysql_data:/var/lib/mysql
# 移除 conf.d 挂载
对于 SELinux:
chcon -Rt svirt_sandbox_file_t ./mysql/conf.d
或临时禁用 SELinux 进行测试:
setenforce 0
检查目录是否存在:
docker exec -it your_mysql_container ls -la /etc/mysql/conf.d
检查 MySQL 错误日志:
docker logs your_mysql_container
检查容器内权限:
docker exec -it your_mysql_container id
docker exec -it your_mysql_container ls -la /etc/mysql
通过以上方法,应该能够解决 "Can't read dir of '/etc/mysql/conf.d/'" 错误并成功部署 MySQL 容器。