代码之家  ›  专栏  ›  技术社区  ›  Albeis

Docker compose:mysqld:无法创建/写入文件“/var/lib/mysql/is_writeable”(错误代码:13-权限被拒绝)

  •  2
  • Albeis  · 技术社区  · 6 年前

     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
    

    我还尝试在db服务上添加用户:

    user: "1000:50"
    

    但任何这些都可以解决这个问题。。我错过了什么?

    MySQL 5.7 installation error `mysqld: Can't create/write to file '/var/lib/mysql/is_writable'`

    2 回复  |  直到 6 年前
        1
  •  9
  •   Albeis    6 年前

    我必须将./db/data user:group更改为999:999,所以docker用户就是进行更改的用户。

    sudo chown 999:999 ./db/data
    
        2
  •  1
  •   6be709c0    6 年前

    ./db/data

    # Not in the dockerfile
    sudo chown $(whoami) ./db/data
    sudo chgrp $(whoami) ./db/data
    

    Docker告诉您没有权限,这可能还意味着您需要验证您是否共享了卷 ./db/数据

        3
  •  1
  •   fireside68    4 年前

    我花了一整天的时间来解决一个类似的问题。我还更改了相关文件的所有权,结果发现它们被删除了,并带着权限问题返回。我改变了我的电脑的所有权 docker-compose 可执行文件。直到将这些卷添加到文档中,我才得到一点缓刑 .dockerignore ,正如在 this Github issue reply .

        4
  •  1
  •   Alexander Yancharuk    4 年前

    相符合的 Dockerfile Percona 5.7映像在CentOS v8和用户界面下运行 mysql

    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
    

    这是对 Albeis answer