Administrator
发布于 2024-12-26 / 4 阅读
0
0

docker start mysql new issues

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和宿主机的日志,以获取更多详细信息。


评论