简体   繁体   English

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

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

I have a profile page in my app which I am migrating to docker.我的应用程序中有一个个人资料页面,我正在迁移到 docker。 I want to have a default profile picture for user who don't upload any picture for that I need to store that picture in my container.我想为不上传任何图片的用户提供默认个人资料图片,因为我需要将该图片存储在我的容器中。

I have my default profile pic stored at data/web/media/default.jpg and want it to copy to vol/web/media/default.jpg in my docker container.我有我的默认配置文件图片存储在 data/web/media/default.jpg 并希望它复制到我的 docker 容器中的 vol/web/media/default.jpg。

I tried COPY but got this error我尝试了 COPY 但收到此错误

failed to solve: rpc error: code = Unknown desc = failed to compute cache key: "/data" not found: not found未能解决:rpc 错误:code = Unknown desc = 无法计算缓存键:“/data”未找到:未找到

My dockerfile:我的 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"]

My docker-compose file:我的 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:

This line isn't going to work since you set your WORKDIR to /app/ earlier.由于您之前将WORKDIR/app/ ,因此该行将不起作用。

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

You have to change your working directory or use an absolute path您必须更改工作目录或使用绝对路径

An other solution would be to put this line below the RUN command since you don't need to be in the /app/ directory to run it:另一种解决方案是将此行放在RUN命令下方,因为您不需要在/app/目录中运行它:

WORDIR = /app/

It looks like you try to copy something from the data dir:看起来您尝试从data目录中复制一些内容:

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

But this directory does not exist.但是这个目录不存在。 However, you copied everything from the data dir on your host machine into your container dir vol on line:但是,您在线将主机上data目录中的所有内容复制到容器目录vol中:

COPY ./data /vol

That means, that all your files and dirs from data or copied into the vol dir in the container.这意味着,您的所有文件和目录都来自data或复制到容器中的vol目录中。 So I geuss you do not need that line at all, as it is already in your container but in the vol directory.所以我猜你根本不需要那行,因为它已经在你的容器中但在vol目录中。

You can use docker volumes which help you to copy and read files from docker您可以使用 docker 卷来帮助您从 docker 复制和读取文件

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

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

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