Heroku Docker部署USER无法写入磁盘,无法穿梭

问题描述 投票:0回答:1

据我所知,不可能以非root用户身份在部署在heroku上的docker容器内写入磁盘(创建非root用户并通过dockerfile整理目录在我的本地机器上工作正常)。

我正在尝试创建一个简单的api,以提取视频,使用ffmpeg处理它们并存储它们。 FFMPEG需要其输出使用磁盘路径(我尝试使用s3预签名的url,但它们不适用于输出多个动态命名文件的HLS)。

这些容器在本地部署和工作精美...

Heroku以非root用户身份运行docker build指令,但是挂载的卷仍然是root所拥有,并且无法由应用程序中执行命令的用户写入。

创建容器的文件结构后,我不知道如何更改目录权限。通过执行heroku.yml,构建管道在github部署上自动开始,并且那里的权限都不够。

人们在将docker部署到heroku时不只是放弃使用本地磁盘全部

,对吗?

这是我的heroku.yml:

build:
  docker:
    web: ./web/Dockerfile
  config:
    LC_ALL: C.UTF-8
    LANG: C.UTF-8
run:
  worker:
    command:
      - rq worker --url redis://redistogo:xxxxxx/ my_queue
    image: web

和明显的dockerfile(请注意,chmod和chown在本地可以正常工作:]:>

FROM ubuntu:18.04
WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY . .
RUN adduser -q worker
# RUN chmod -R 0777 /usr/src/app # fails with insufficient permission
# RUN chown -R worker /usr/src/app # fails with insufficient permission
USER worker

据我所知,不可能以非root用户身份将其写入部署在heroku上的docker容器内的磁盘(创建非root用户并通过dockerfile整理目录工作正常...

] >

事实证明,人们通过docker部署到heroku时不只是放弃使用本地磁盘。令人惊讶,我知道。

主要是在运行chown时使用正确的用户组设置(以及dockerfile中的顺序)。这是为我工作的dockerfile(我的web和worker进程都使用它,它们也使用相同的图像,这很重要):

这是起作用的dockerfile:

FROM ubuntu:18.04
WORKDIR /usr/src/app
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY . .
RUN adduser -q web
RUN mkdir -p /usr/src/app/tempfiles
RUN chown -R web:web /usr/src/app/tempfiles
USER web
CMD gunicorn --bind 0.0.0.0:$PORT wsgi

原始帖子中的heroku.yml起作用,这是通过docker-compose.yml进行的本地设置:

version: '3'
services:
  web:
    build: ./web
    env_file: ./web/.env
    ports:
      - "5000:5000"
    volumes:
      - ./web:/web
  worker:
    build: ./web
    env_file: ./worker/.workerenv
    command: rq worker --url redis://redistogo:xxxxxx/ my_queue
    volumes:
      - ./web:/web
python linux docker heroku file-permissions
1个回答
0
投票

事实证明,人们通过docker部署到heroku时不只是放弃使用本地磁盘。令人惊讶,我知道。

© www.soinside.com 2019 - 2024. All rights reserved.