当使用 Docker Compose 部署 MySQL 时遇到卷绑定问题,这通常是由于权限或路径配置不当导致的。以下是常见问题和解决方案:
Error response from daemon: invalid volume specification
Permission denied
错误确保 docker-compose.yml
中的卷路径格式正确:
volumes:
- ./mysql-data:/var/lib/mysql # 相对路径
- /absolute/path/mysql-data:/var/lib/mysql # 绝对路径
MySQL 容器默认以 mysql
用户运行(UID 999),如果使用本地目录作为卷:
# 创建数据目录
mkdir -p ./mysql-data
# 设置适当权限(选择一种方式)
# 方式1: 更改所有权
sudo chown -R 999:999 ./mysql-data
# 方式2: 开放完全权限(开发环境可用)
sudo chmod -R 777 ./mysql-data
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: your_database
MYSQL_USER: your_user
MYSQL_PASSWORD: your_password
volumes:
- mysql-data:/var/lib/mysql
- ./mysql-config:/etc/mysql/conf.d
ports:
- "3306:3306"
restart: unless-stopped
volumes:
mysql-data:
如果不想处理本地目录权限问题,可以使用 Docker 管理的命名卷:
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
如果使用 SELinux,可能需要添加 :z
或 :Z
标志:
volumes:
- ./mysql-data:/var/lib/mysql:z
在 Windows 或 Mac 上使用 Docker Desktop 时:
/c/Users/...
而不是 C:\Users\...
)docker logs <container_name>
docker exec -it <container_name> bash
--privileged
模式临时测试是否是权限问题通过以上方法,您应该能够解决大多数 Docker Compose 中 MySQL 的卷绑定问题。