【问题标题】:docker-compose issue: Permission denied when attempting to create/mount volumedocker-compose 问题:尝试创建/挂载卷时权限被拒绝
【发布时间】:2019-06-05 22:38:58
【问题描述】:

我有以下 docker-compose.yml 文件:

version: "3"
services:
  dbs-poa-loc001d:
    image: percona
    volumes:
      - ./mysql_backup:/var/lib/mysql
      - ./create_databases:/docker-entrypoint-initdb.d
    hostname: "dbs-poa-loc001d"
    container_name: dbs-poa-loc001d
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    ports:
      - "3306:3306"
    networks:
      - azion-network
...

当我尝试创建 dbs-poa-loc001d 服务(项目的数据库)时,我收到以下错误:

Starting dbs-poa-loc001d ... done
Attaching to dbs-poa-loc001d
dbs-poa-loc001d    | Initializing database
dbs-poa-loc001d    | mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
dbs-poa-loc001d    | 2019-01-11T01:17:52.060984Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
dbs-poa-loc001d    | 2019-01-11T01:17:52.062286Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.
dbs-poa-loc001d    | 2019-01-11T01:17:52.062299Z 0 [ERROR] Aborting
dbs-poa-loc001d    | 
dbs-poa-loc001d exited with code 1

在我工作的 MacOS 计算机上不会发生此错误,但在我的家用计算机(运行 Ubuntu 16.04)中会发生。我确实注意到为保存卷数据而创建的主机上的mysql_backup 文件夹设置为组和用户根。谁能告诉我发生了什么,我该如何解决?已经尝试过但没有成功:

  • 使用 sudo 运行 docker-compose 命令
  • 手动将文件夹的所有者和用户更改为我的实际(低权限)用户。

我当前的设置和安装版本是:

  • Ubuntu 16.04
  • Docker 版本 18.09.0,构建 4d60db4
  • docker-compose 版本 1.23.2,构建 1110ad0
  • docker-compose 是使用sudo pip install docker-compose 安装的

【问题讨论】:

    标签: docker docker-compose ubuntu-16.04 docker-volume


    【解决方案1】:

    您可以尝试将mysql_backup的权限设置为1001:0吗?
    类似sudo chown -R 1001:0 ./mysql_backup
    或作为替代方案,但仅当文件夹为空时 sudo chmod 777 ./mysql_backup

    关于 percona Dockerfile mysql 用户 id 是 1001 https://github.com/percona/percona-docker/blob/master/percona-server.80/Dockerfile

    【讨论】:

    • 将所有者更改为 1001:0 无效。添加了 777 权限。我不得不添加它仍然很奇怪。有谁知道更好的解决方案吗?
    • 当您能够以 777 权限运行 percona 时,尝试在 percona 运行时运行 lsof ./mysql_backup,以查看哪些用户(或 userId)在此目录中打开了文件。它应该是那个 percona 下的用户运行。之后,您可能能够正确设置所有者并将权限恢复正常。
    猜你喜欢
    • 2016-03-30
    • 2021-01-09
    • 2020-08-31
    • 2022-06-23
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多