prompt
按照上一篇文章,启动完成了。但是,通过 `docker-compose down`停止后,再次通过`docker-compose up -d`启动,却一直启动不起来了,一直是`Restarting`的状态,log中提示:chown: changing ownership of '/var/lib/mysql/performance_schema/events_statements_summary_by_digest.frm': Permission denied chown: changing ownership of '/var/lib/mysql/client-key.pem': Permission denied chown: changing ownership of '/var/lib/mysql/auto.cnf': Permission denied chown: changing ownership of '/var/lib/mysql/server-cert.pem': Permission denied [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
应答
如果再次启动时遇到相同的权限问题,并且容器一直处于Restarting
状态,这可能是因为容器在尝试更改文件所有权时失败,导致无法正常启动。以下是一些可能的解决方法:
1. 检查宿主机目录权限
确保宿主机上的/Users/cab5/dockercompose/bas/mysql/data
目录及其子文件的权限允许Docker容器进行修改。你可以尝试以下命令来更改权限:
sudo chown -R 1001:1001 /Users/cab5/dockercompose/bas/mysql/data
sudo chmod -R 777 /Users/cab5/dockercompose/bas/mysql/data
2. 使用privileged
模式
在docker-compose.yml
文件中,确保已经设置了privileged: true
,这会给予容器更多的权限:
version: '3'
services:
mysql:
image: mysql:5.7
restart: always
container_name: mysql
privileged: true
environment:
MYSQL_ROOT_PASSWORD: mysql123321
ports:
- 3306:3306
volumes:
- /Users/cab5/dockercompose/bas/mysql/data:/var/lib/mysql
3. 检查Selinux状态
如果Selinux正在运行,它可能会限制容器的权限。你可以尝试关闭Selinux或将其设置为宽容模式:
# 查看Selinux状态
sestatus
# 设置为宽容模式(临时)
setenforce 0
# 设置为宽容模式(永久)
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
4. 清理并重新创建数据卷
有时,数据卷中的某些文件可能会导致权限问题。你可以尝试清理数据卷并重新创建:
# 停止并删除容器
docker-compose down
# 删除数据卷中的文件(请确保备份重要数据)
rm -rf /Users/cab5/dockercompose/bas/mysql/data/*
# 重新启动容器
docker-compose up -d
5. 检查Docker守护进程配置
确保Docker守护进程配置允许容器修改宿主机文件系统。可以在Docker守护进程配置文件中设置相关选项。
6. 使用用户命名空间
在docker-compose.yml
中,可以尝试使用用户命名空间来映射容器内的用户ID和组ID:
version: '3'
services:
mysql:
image: mysql:5.7
restart: always
container_name: mysql
user: "1001:1001"
environment:
MYSQL_ROOT_PASSWORD: mysql123321
ports:
- 3306:3306
volumes:
- /Users/cab5/dockercompose/bas/mysql/data:/var/lib/mysql
通过以上方法,应该可以解决容器启动时遇到的权限问题。如果问题依然存在,请检查Docker和宿主机的日志,以获取更多详细信息。