gpt4 book ai didi

docker - 如何使用非 super 用户身份以Cron身份将Alpine图像写入文件的权限修复为可访问卷

转载 作者:行者123 更新时间:2023-12-04 15:18:14 28 4
gpt4 key购买 nike

我正在尝试在docker中创建一个多阶段构建,该构建只运行一个非root crontab即可写入可从容器外部访问的卷。我在权限方面有两个问题,与卷外部访问和cron有关:

  • 是dockerfile中的第一个构建,它使用entry-pointsu-exec创建了一个非root用户镜像,有用的可以修复批量的权限!
  • 在同一dockerfile中的第二个构建使用第一个镜像运行crond进程,该进程通常写入/backup文件夹。

  • 用于构建dockerfile的 docker-compose.yml文件:
    version: '3.4'
    services:
    scrap_service:
    build: .
    container_name: "flight_scrap"
    volumes:
    - /home/rey/Volumes/mongo/backup:/backup

    在DockerFile(1)的第一步中,我尝试使 the answer given by denis bertovic适应Alpine镜像
    ############################################################
    # STAGE 1
    ############################################################

    # Create first stage image
    FROM gliderlabs/alpine:edge as baseStage

    RUN echo http://nl.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories
    RUN apk add --update && apk add -f gnupg ca-certificates curl dpkg su-exec shadow

    COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh

    # ADD NON ROOT USER, i hard fix value to 1000, my current id
    RUN addgroup scrapy \
    && adduser -h /home/scrapy -u 1000 -S -G scrapy scrapy

    ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

    我的 docker-entrypoint.sh用来修复权限是:
    #!/usr/bin/env bash
    chown -R scrapy .
    exec su-exec scrapy "$@"

    第二阶段(2)运行cron服务以写入作为卷安装的/backup文件夹
    ############################################################
    # STAGE 2
    ############################################################

    FROM baseStage
    MAINTAINER rey

    ENV TZ=UTC
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

    RUN apk add busybox-suid
    RUN apk add -f tini bash build-base curl

    # CREATE FUTURE VOLUME FOLDER WRITEABLE BY SCRAPY USER
    RUN mkdir /backup && chown scrapy:scrapy /backup

    # INIT NON ROOT USER CRON CRONTAB

    COPY crontab /var/spool/cron/crontabs/scrapy
    RUN chmod 0600 /var/spool/cron/crontabs/scrapy
    RUN chown scrapy:scrapy /var/spool/cron/crontabs/scrapy

    RUN touch /var/log/cron.log
    RUN chown scrapy:scrapy /var/log/cron.log

    # Switch to user SCRAPY already created in stage 1
    WORKDIR /home/scrapy
    USER scrapy

    # SET TIMEZONE https://serverfault.com/questions/683605/docker-container-time-timezone-will-not-reflect-changes

    VOLUME /backup

    ENTRYPOINT ["/sbin/tini"]
    CMD ["crond", "-f", "-l", "8", "-L", "/var/log/cron.log"]

    通常在 /backup卷文件夹中创建测试文件的crontab文件:
    * * * * * touch /backup/testCRON

    调试阶段:
  • 使用bash登录到我的图像,似乎图像正确运行了scrapy用户:
    uid=1000(scrapy) gid=1000(scrapy) groups=1000(scrapy)
  • crontab -e命令还提供了正确的信息
  • 但是第一个错误 cron无法正确运行,当我cat /var/log/cron.log拥有权限时,拒绝了错误
    crond: crond (busybox 1.27.2) started, log level 8
    crond: root: Permission denied
    crond: root: Permission denied
  • 当我尝试使用touch /backup/testFile命令直接写入/backup文件夹时,我还有第二个错误/backup卷文件夹仍然只能使用root权限进行访问,不知道为什么。
  • 最佳答案

    in this answer所述,应将crondcron用作根。

    请转而使用 aptible/supercronic ,它是crontab兼容的作业运行程序,专门设计用于在容器中运行。它将容纳您创建的任何用户。

    关于docker - 如何使用非 super 用户身份以Cron身份将Alpine图像写入文件的权限修复为可访问卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48188239/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com