[英]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.