繁体   English   中英

如何将图像文件从我的桌面复制到 docker 容器

[英]How to copy image file from my desktop to docker container

我的应用程序中有一个个人资料页面,我正在迁移到 docker。 我想为不上传任何图片的用户提供默认个人资料图片,因为我需要将该图片存储在我的容器中。

我有我的默认配置文件图片存储在 data/web/media/default.jpg 并希望它复制到我的 docker 容器中的 vol/web/media/default.jpg。

我尝试了 COPY 但收到此错误

未能解决:rpc 错误:code = Unknown desc = 无法计算缓存键:“/data”未找到:未找到

我的 dockerfile:

FROM python:3.9-alpine3.13
LABEL maintainer="mRk"

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
COPY ./app /app
COPY ./scripts /scripts
COPY ./data /vol

WORKDIR /app
EXPOSE 8000

RUN python -m venv /py && \
    /py/bin/pip install --upgrade pip && \
    apk add --update --no-cache postgresql-client && \
    apk add --update --no-cache --virtual .tmp-deps \
        build-base postgresql-dev musl-dev linux-headers && \
    apk add --virtual build-deps gcc python3-dev musl-dev && \
    apk add jpeg-dev zlib-dev libjpeg && \
    pip install Pillow && \
    apk del build-deps && \
    /py/bin/pip install -r /requirements.txt && \
    apk del .tmp-deps && \
    adduser --disabled-password --no-create-home app && \
    mkdir -p /vol/web/static && \
    mkdir -p /vol/web/media && \
    cp ./data/web/media/default.jpg /vol/web/media/default.jpg && \
    chown -R app:app /vol && \
    chmod -R 755 /vol && \
    chmod -R +x /scripts

ENV PATH="/scripts:/py/bin:$PATH"

USER app

CMD ["run.sh"]

我的 docker-compose 文件:

version: "3.9"

services:
  app:
    build:
      context: .
    restart: always
    volumes:
      - static-data:/vol/web
    environment:
      - DB_HOST=db
      - DB_NAME=${DB_NAME}
      - DB_USER=${DB_USER}
      - DB_PASS=${DB_PASS}
      - SECRET_KEY=${SECRET_KEY}
      - ALLOWED_HOSTS=${ALLOWED_HOSTS}
      - EMAIL_USER=${EMAIL_USER}
      - EMAIL_PASS=${EMAIL_PASS}
    depends_on:
      - db

  db:
    image: postgres:13-alpine
    restart: always
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASS}

  proxy:
    build:
      context: ./proxy
    restart: always
    depends_on:
      - app
    ports:
      - 80:8000
    volumes:
      - static-data:/vol/static

volumes:
  postgres-data:
  static-data:

由于您之前将WORKDIR/app/ ,因此该行将不起作用。

cp ./data/web/media/default.jpg /vol/web/media/default.jpg && \

您必须更改工作目录或使用绝对路径

另一种解决方案是将此行放在RUN命令下方,因为您不需要在/app/目录中运行它:

WORDIR = /app/

看起来您尝试从data目录中复制一些内容:

cp ./data/web/media/default.jpg /vol/web/media/default.jpg && \

但是这个目录不存在。 但是,您在线将主机上data目录中的所有内容复制到容器目录vol中:

COPY ./data /vol

这意味着,您的所有文件和目录都来自data或复制到容器中的vol目录中。 所以我猜你根本不需要那行,因为它已经在你的容器中但在vol目录中。

您可以使用 docker 卷来帮助您从 docker 复制和读取文件

https://docs.docker.com/storage/volumes/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM