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

b0zn9rqh  于 2023-06-21  发布在  Mysql
关注(0)|答案(7)|浏览(485)

我在使用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'

2jcobegt

2jcobegt1#

我不得不将./db/data user:group更改为999:999,所以docker user是进行更改的人。

sudo chown 999:999 ./db/data
wpcxdonn

wpcxdonn2#

确保运行docker的用户可以访问./db/data

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

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

yws3nbqq

yws3nbqq3#

根据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的补充。

bvuwiixz

bvuwiixz4#

我花了一整天的时间来解决一个类似的(几乎完全相同的)问题。我还更改了相关文件的所有权,结果却看到它们被清除,并带着权限问题回来。我更改了curl安装的docker-compose可执行文件的所有权。直到将卷添加到.dockerignore,我才得到一点缓解,正如在这个Github问题回复中所建议的那样。

agxfikkp

agxfikkp5#

我遭受了这个问题,花了相当长的时间才弄清楚罪魁祸首是什么。
在我的例子中,我有一个双引导系统Winblowz-Linux。我的问题项目的代码是在Windows文件系统上。
一旦我将项目克隆到我的Linux驱动器上,在ext4文件系统上,问题就消失了。

cwxwcias

cwxwcias6#

需要权限来执行目录中的脚本

sudo chown 999:999 ./db/data
sudo chmod +x ./db/data
uqdfh47h

uqdfh47h7#

您可以在构建容器时Map权限,而不是更改权限以匹配容器用户ID:docker-compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g)
Dockerfile:

RUN usermod  --uid $UID mysql
RUN groupmod --gid $GID mysql

相关问题