我在docker镜像中运行MySQL,并从容器内的主机上挂载一个目录,让数据库持久化。./db:/var/lib/mysql
. 由于数据变得非常大,我不得不把所有的东西都移动到我的外部SSD上。现在看来,挂载目录的权限被搞乱了。当我让MySQL容器初始化 ./db
目录,一切正常。但如果我停止容器,移除外部固态硬盘,然后将其连接回来,再重新启动容器,MySQL容器就会不断重启,并记录一些事情,比如:"我在Mac上运行docker。
chown: changing ownership of '/var/lib/mysql/._binlog.000004': Operation not permitted
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镜像里面运行MySQL,我在容器里面从主机挂载一个目录,让数据库持久化。
好吧,我不知道这是否是解决这个问题的最好方法,但目前我可以通过这个来解决这个问题。如果这完全是愚蠢的,有更好的解决方案,请让我知道。
我试过在容器上运行 docker
本身并通过 --user "$(id -u):$(id -g)"
并且成功了。不幸的是,我们无法在 docker-compose
文件,所以我必须创建自己的脚本,设置一个环境变量并运行docker-compose。
DOCKER_COMPOSE_USER=$(id -u):$(id -g) docker-compose up -d
然后运行docker -compose: docker-compose.yml
:
user: ${DOCKER_COMPOSE_USER}
这样做的伎俩!