Docker-compose:mysqld:无法创建/写入文件'/ var / lib / mysql / is_writable'(错误代码:13-权限被拒绝)

时间:2019-02-03 21:42:06

标签: mysql docker docker-compose

使用docker compose启动数据库服务时遇到问题:

 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并从构建而不是图像进行创建:

FROM percona:5.7

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

我还尝试在数据库服务上添加用户:

user: "1000:50"

但是其中任何一个都可以解决这个问题。我想念的是什么?

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

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

sudo chown 999:999 ./db/data

答案 2 :(得分:1)

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

答案 3 :(得分: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

这是对Albeis answer 的补充。