![](/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.