Docker中的MySQL挂载目录权限在外部SSD上被搞乱了

问题描述 投票:0回答:1

我在docker镜像中运行MySQL,并从容器内的主机上挂载一个目录,让数据库持久化。./db:/var/lib/mysql. 由于数据变得非常大,我不得不把所有的东西都移动到我的外部SSD上。现在看来,挂载目录的权限被搞乱了。当我让MySQL容器初始化 ./db 目录,一切正常。但如果我停止容器,移除外部固态硬盘,然后将其连接回来,再重新启动容器,MySQL容器就会不断重启,并记录一些事情,比如:"我在Mac上运行docker。

chown: changing ownership of '/var/lib/mysql/._binlog.000004': Operation not permitted
  • 我在Mac上运行docker。
  • 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,我在容器里面从主机挂载一个目录,让数据库持久化。

mysql docker docker-compose file-permissions
1个回答
0
投票

好吧,我不知道这是否是解决这个问题的最好方法,但目前我可以通过这个来解决这个问题。如果这完全是愚蠢的,有更好的解决方案,请让我知道。

我试过在容器上运行 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}

这样做的伎俩!

© www.soinside.com 2019 - 2024. All rights reserved.