使用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'`
答案 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 uid
和 gid
。将您的目录权限更改为 999:999
:
sudo chown 999:999 ./db/data