MySQL Docker 中的挂载目录权限在外部 SSD 上混乱
MySQL in Docker mounted directory permissions are messed up on external SSD
我 运行 MySQL 在 docker 图像中,我正在从容器内的主机挂载一个目录以保持数据库 ./db:/var/lib/mysql
。
由于数据变得非常大,我不得不将所有内容都移动到我的外部 SSD 上。现在好像是挂载目录的权限搞乱了。当我让 MySQL 容器初始化 ./db
目录时,一切都很好。但是如果我停止容器,移除外部 SSD,然后将其重新连接并再次启动容器,MySQL 容器会不断重启,并记录如下内容:
chown: changing ownership of '/var/lib/mysql/._binlog.000004': Operation not permitted
- 我 运行 docker 我 mac。
ls -l
:drwxrwxrwx@ 1 amir staff 131072 May 5 21:25 db
。
docker -v
:Docker version 19.03.8, build afacb8b
。
docker-compose -v
: docker-compose version 1.25.4, build 8d51620a
docker-compose.yml
:
version: "3"
services:
db:
image: mysql
volumes:
- ./db:/var/lib/mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: password
networks:
- projectnetwork
networks:
projectnetwork:
任何关于如何解决这个问题的提示都将不胜感激:) 谢谢!
好的,我不确定这是否是解决此问题的最佳方法,但目前我可以解决此问题。请让我知道这是否完全愚蠢并且有更好的解决方案。
我尝试了 运行 带有 docker
本身的容器并通过了 --user "$(id -u):$(id -g)"
并且成功了。
不幸的是,我们不能在 docker-compose
文件中执行子 bash 命令,所以我不得不创建自己的脚本来设置环境变量并运行 docker-compose:
DOCKER_COMPOSE_USER=$(id -u):$(id -g) docker-compose up -d
在docker-compose.yml
中:
user: ${DOCKER_COMPOSE_USER}
成功了!
我 运行 MySQL 在 docker 图像中,我正在从容器内的主机挂载一个目录以保持数据库 ./db:/var/lib/mysql
。
由于数据变得非常大,我不得不将所有内容都移动到我的外部 SSD 上。现在好像是挂载目录的权限搞乱了。当我让 MySQL 容器初始化 ./db
目录时,一切都很好。但是如果我停止容器,移除外部 SSD,然后将其重新连接并再次启动容器,MySQL 容器会不断重启,并记录如下内容:
chown: changing ownership of '/var/lib/mysql/._binlog.000004': Operation not permitted
- 我 运行 docker 我 mac。
ls -l
:drwxrwxrwx@ 1 amir staff 131072 May 5 21:25 db
。docker -v
:Docker version 19.03.8, build afacb8b
。docker-compose -v
:docker-compose version 1.25.4, build 8d51620a
docker-compose.yml
:version: "3" services: db: image: mysql volumes: - ./db:/var/lib/mysql restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password networks: - projectnetwork networks: projectnetwork:
任何关于如何解决这个问题的提示都将不胜感激:) 谢谢!
好的,我不确定这是否是解决此问题的最佳方法,但目前我可以解决此问题。请让我知道这是否完全愚蠢并且有更好的解决方案。
我尝试了 运行 带有 docker
本身的容器并通过了 --user "$(id -u):$(id -g)"
并且成功了。
不幸的是,我们不能在 docker-compose
文件中执行子 bash 命令,所以我不得不创建自己的脚本来设置环境变量并运行 docker-compose:
DOCKER_COMPOSE_USER=$(id -u):$(id -g) docker-compose up -d
在docker-compose.yml
中:
user: ${DOCKER_COMPOSE_USER}
成功了!