【问题标题】:Docker-compose : mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)Docker-compose:mysqld:无法创建/写入文件'/var/lib/mysql/is_writable'(错误代码:13 - 权限被拒绝)
【发布时间】:2019-06-27 16:56:41
【问题描述】:

我在使用 docker compose 启动 db 服务时遇到问题:

 version: '3'
 services:

 # Mysql DB
    db:
        image: percona:5.7
        #build: ./docker/mysql
        volumes:
          - "./db/data:/var/lib/mysql"
          - "./db/init:/docker-entrypoint-initdb.d"
          - "./db/backups:/tmp/backups"
          - "./shared/home:/home"   
          - "./shared/root:/home"  
        restart: unless-stopped
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: db_name
            MYSQL_USER: user
            MYSQL_PASSWORD: pass
       ports:
       - "3307:3306"

我已经尝试了一切,但没有运气:

"./db/data:/var/lib/mysql:rw"

创建一个 dockerfile 并从 build 而不是 image 创建:

FROM percona:5.7

RUN adduser mysql
RUN sudo chown mysql /var/lib/mysql
RUN sudo chgrp mysql /var/lib/mysql

我还尝试在 db 服务上添加用户:

user: "1000:50"

但其中任何一个都可以解决这个问题.. 我错过了什么?

MySQL 5.7 installation error `mysqld: Can't create/write to file '/var/lib/mysql/is_writable'`

【问题讨论】:

  • 我已经执行了你的 compose 文件并且它有效,你有没有尝试停止和删除容器?
  • 谢谢@jazgot。试了很多次都没有成功。

标签: mysql docker docker-compose


【解决方案1】:

根据Dockerfile Percona 5.7 镜像在 CentOS v8 和用户mysql 下运行。检查容器内的用户 ID(uid)和组 ID(gid):

user@host$ docker run --rm -t percona:5.7.29 sh -c 'id'
uid=999(mysql) gid=999(mysql) groups=999(mysql)

容器内的默认用户使用 999 uidgid。比将您的目录权限更改为999:999

sudo chown 999:999 ./db/data

这是对Albeisanswer 的补充。

【讨论】:

    【解决方案2】:

    我花了一整天的时间来解决类似(几乎完全一样)的问题。我还更改了相关文件的所有权,只是看到它们被清除并出现权限问题。我更改了 curl 安装的 docker-compose 可执行文件的所有权。按照this Github issue reply 中的建议,在将卷添加到.dockerignore 之前,我没有得到一点缓刑。

    【讨论】:

      【解决方案3】:

      我必须将 ./db/data user:group 更改为 999:999,所以 docker 用户是进行更改的人。

      sudo chown 999:999 ./db/data
      

      【讨论】:

      • 遇到了同样的问题。该解决方案解决了该问题,但似乎不是实现该问题的最佳方法。在我的主机上,uid 999 由 systemd-coredump 用户和容器内的 mysql 用户使用。就我的实际观点而言,它适用于该用户,使用 mysql 映像,但如果您有额外的服务,它将很快变得不合适。权利必须以更好的方式管理。如果有人有信息要补充,请随时补充。
      【解决方案4】:

      确保运行 docker 的用户有权访问./db/data

      # Not in the dockerfile
      sudo chown $(whoami) ./db/data
      sudo chgrp $(whoami) ./db/data
      

      Docker告诉你你没有权限,这也可能意味着你需要验证你的共享卷./db/data需要有正确的权限。

      【讨论】:

      • 感谢@Mathieu Lescaudron。它没有成功。仍然报同样的错误。
      • 帮我解决了问题
      猜你喜欢
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2020-10-21
      • 2021-08-30
      • 2011-12-28
      • 2019-08-15
      • 1970-01-01
      相关资源
      最近更新 更多