【问题标题】:Docker entrypoint initdb PERMISSION DENIEDDocker 入口点 initdb 权限被拒绝
【发布时间】:2021-02-16 18:12:16
【问题描述】:

我在运行 docker-compose up 时收到以下错误:

非常感谢您的帮助

【问题讨论】:

    标签: sql postgresql docker docker-compose relational-database


    【解决方案1】:

    我通过在将脚本复制到 docker-entrypoint-initdb.d 后将其添加到 Dockerfile 解决了这个问题

    RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/
    

    Dockerfile 示例

    FROM mysql:latest
    
    ENV MYSQL_DATABASE NAME_DATABASE
    ENV MYSQL_ROOT_PASSWORD ***********
    
    COPY ./sql-scripts/ /docker-entrypoint-initdb.d/
    RUN chown -R mysql:mysql /docker-entrypoint-initdb.d/
    EXPOSE 3306
    
    CMD ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
    

    下一步是构建镜像:

    docker build -t image-db:latest . 
    

    下一步是创建容器

    docker run -d -p 3306:3306 --name container-db  image-db:latest
    

    【讨论】:

    • 如果文件是从 docker compose 初始化的,如何更改权限?
    • 找到了解决方案,只需chmod -R 777 /config/folder 即可解决问题。其中config/folder是mysql脚本所在的位置。
    【解决方案2】:

    您不应覆盖 postgres 图像入口点。它旨在在/docker-entrypoint-initdb.d/ 目录中查找.sql 文件(参见line in script)。

    您应该将您的.sql 文件挂载到/docker-entrypoint-initdb.d/ 并在启动时对其进行处理(仅当数据库不存在时)

    【讨论】:

    • 感谢您的回复@gcharbon。我更新了帖子,当我运行 docker compose up 时出现权限被拒绝错误。你知道如何解决这个问题吗?非常感谢。
    • 不要使用 shell 脚本来引导你的数据库。您正在使用未安装 bashalpine 图像。所以删除挂载shell脚本的卷,只需将.sql文件挂载到/docker-entrypoint-initdb.d/
    • 感谢@gcharbon 的快速回复。我通过将文件 init-db.sh 的权限更改为 755 使用 bash 进入容器后解决了这个问题。现在当我运行 docker compose up 时,它成功初始化了数据库。
    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2019-11-05
    • 2022-07-20
    • 2020-08-31
    • 2021-11-05
    相关资源
    最近更新 更多