我在使用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'
7条答案
按热度按时间2jcobegt1#
我不得不将./db/data user:group更改为999:999,所以docker user是进行更改的人。
wpcxdonn2#
确保运行docker的用户可以访问
./db/data
Docker告诉你你没有权限,这也可能意味着你需要验证你的共享卷
./db/data
需要有正确的权限。yws3nbqq3#
根据Dockerfile Percona 5.7镜像在CentOS v8和用户
mysql
下运行。检查容器中的用户ID(uid)和组ID(gid):容器内的默认用户使用999
uid
和gid
。将您的目录权限更改为999:999
:这是对Albeisanswer的补充。
bvuwiixz4#
我花了一整天的时间来解决一个类似的(几乎完全相同的)问题。我还更改了相关文件的所有权,结果却看到它们被清除,并带着权限问题回来。我更改了curl安装的
docker-compose
可执行文件的所有权。直到将卷添加到.dockerignore
,我才得到一点缓解,正如在这个Github问题回复中所建议的那样。agxfikkp5#
我遭受了这个问题,花了相当长的时间才弄清楚罪魁祸首是什么。
在我的例子中,我有一个双引导系统Winblowz-Linux。我的问题项目的代码是在Windows文件系统上。
一旦我将项目克隆到我的Linux驱动器上,在ext4文件系统上,问题就消失了。
cwxwcias6#
需要权限来执行目录中的脚本
uqdfh47h7#
您可以在构建容器时Map权限,而不是更改权限以匹配容器用户ID:
docker-compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g)
Dockerfile: