![](/img/trans.png)
[英]How to copy a file from host machine to Docker container using COPY directive in docker image?
[英]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 复制和读取文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.