簡體   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