【问题标题】:Docker image folder permission is not getting updatedDocker 映像文件夹权限未更新
【发布时间】:2020-01-09 06:35:24
【问题描述】:

尝试在 ECS 中运行 docker 映像 (openproject) 时,我们收到错误“DETAIL: Permissions should be u=rwx (0700) for /var/openproject/pgdata folder”

#ls -l /var/openporject
drwxr-xr-x 2 root     root     4096 Jan  8 15:56 assets
drwxr-xr-x 2 postgres postgres 4096 Dec 19 08:40 pgdata

所以我们尝试通过dockerfile更新权限

FROM openproject/community:latest
#USER postgres
USER root

RUN chmod 700 /var/openproject/pgdata
RUN chmod 700 /var/openproject/assets

即使在构建映像之后,文件夹的权限也没有得到更新。

构建方法docker-compose:

version: '3'
services:
  openproject:
    container_name: openproj_server
    build:
      context: .
    ports:
      - 80:80
    environment:
      - DATABASE_URL=postgres://aws@postgresurl:5432/openproject
      - SECRET_KEY_BASE=junksecret

建议会有帮助

更新 1:

试验一:

通过 entrypoint.sh 方法设置权限失败,出现错误:DETAIL: File "/var/openproject/pgdata/PG_VERSION" is missing.

FROM openproject/community:latest
COPY ./entrypoint.sh /app/docker/
RUN chmod +x /app/docker/entrypoint.sh

**entrypoint.sh**
chmod 700 /var/openproject/pgdata
echo "Giving 700(rwx) Permission to pgdata folder"
chown postgres:postgres /var/openproject/pgdata
echo "Setting up ownership to postgres user / group(*just to double ensure)"

Cloudwatch 日志:

2020-01-08 20:34:59.734 UTC [54] FATAL:  "/var/openproject/pgdata" is not a valid data directory
2020-01-08 20:34:59.734 UTC [54] DETAIL:  File "/var/openproject/pgdata/PG_VERSION" is missing.
2020-01-08 20:34:59,735 INFO exited: postgres (exit status 1; not expected)

试验 2:

在 Fargate 任务中为容器绑定非持久的空存储使用了最新的 openproject

**Fargate Task Def snip**
   "mountPoints": [
        {
          "readOnly": null,
          "containerPath": "/var/openproject",
          "sourceVolume": "openproject"
        }

Cloudwatch 日志:

2020-01-08 21:50:51.686 UTC [226] FATAL:  data directory "/var/openproject/pgdata" has group or world access
2020-01-08 21:50:51.686 UTC [226] DETAIL:  Permissions should be u=rwx (0700).
2020-01-08 21:50:51,776 INFO exited: postgres (exit status 1; not expected)

试验 3:

通过入口点使用 pgdata 权限更新图像并再次引发致命错误:文件“/var/openproject/pgdata/PG_VERSION”丢失。

Cloudwatch 日志:

LOG:  skipping missing configuration file "/var/openproject/pgdata/postgresql.auto.conf"
2020-01-08 22:12:52.404 UTC [228] FATAL:  "/var/openproject/pgdata" is not a valid data directory
2020-01-08 22:12:52.404 UTC [228] DETAIL:  File "/var/openproject/pgdata/PG_VERSION" is missing.
2020-01-08 22:12:52,494 INFO exited: postgres (exit status 1; not expected)

无法确定问题。

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    /var/openproject/pgdata 和 /var/openproject/assets 在 openproject Dockerfile 中都标记为 VOLUMES。 - https://github.com/opf/openproject-ce/blob/stable/8/Dockerfile

    来自 Dockerfile 的相关 sn-p

    <snip>
    ENV APP_DATA_PATH /var/openproject/assets
    ENV APP_DATA_PATH_LEGACY /var/db/openproject
    <snip>
    VOLUME ["$PGDATA", "$APP_DATA_PATH"]
    

    因此,您更改权限的 RUN 指令在构建后不会持续存在。

    您可以按照以下任何方法解决此问题:

    1. 您可以修改openproject 的entrypoint.sh 脚本来修复启动过程中的权限。

    2. 您可以在具有适当权限的主机上创建两个卷并将它们挂载到openproject 容器中。


    有关类似讨论,请参阅以下答案:

    https://stackoverflow.com/a/59639759/5459201

    【讨论】:

    • ...这意味着您可以通过更新 openproject 映像中包含的 entrypoint.sh 脚本来修复权限。
    • @larsks。是的。几乎没有其他方法可以解决此问题。我在答案中链接了一个类似的问题。
    • 感谢指点。这里的替代方法是什么?我的范围是将 openproject 与 aws rds 一起使用。但是日志中的 ecs 这被报告为致命
    • 就像@larks 建议的那样,你可以更新openproject 的entrypoint.sh 文件来修复权限。
    • 或者您也可以先在主机上创建具有适当权限的卷,然后将它们挂载到 openproject 容器中。
    猜你喜欢
    • 1970-01-01
    • 2019-12-06
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2012-02-16
    • 2016-06-16
    相关资源
    最近更新 更多