我的應用程式中有一個個人資料頁面,我要遷移到 docker。我想為沒有上傳任何圖片的用戶提供默認的個人資料圖片,我需要將該圖片存盤在我的容器中。
我的默認組態檔圖片存盤在 data/web/media/default.jpg 并希望它復制到我的 docker 容器中的 vol/web/media/default.jpg。
我試過 COPY 但得到這個錯誤
無法解決:rpc 錯誤:代碼 = 未知描述 = 無法計算快取鍵:“/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:
uj5u.com熱心網友回復:
看起來你試圖從data目錄中復制一些東西:
cp ./data/web/media/default.jpg /vol/web/media/default.jpg && \
但是這個目錄不存在。但是,您將data主機上的目錄中的所有內容復制到您的容器目錄vol中:
COPY ./data /vol
這意味著,您的所有檔案和目錄都來自data或復制到vol容器中的目錄中。所以我猜你根本不需要那行,因為它已經在你的容器中,但在vol目錄中。
uj5u.com熱心網友回復:
這條線是行不通的,因為你設定你WORKDIR要/app/早。
cp ./data/web/media/default.jpg /vol/web/media/default.jpg && \
您必須更改作業目錄或使用絕對路徑
另一種解決方案是將此行放在RUN命令下方,因為您不需要在/app/目錄中運行它:
WORDIR = /app/
uj5u.com熱心網友回復:
您可以使用 docker 卷來幫助您從 docker 復制和讀取檔案
https://docs.docker.com/storage/volumes/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365518.html
上一篇:如何在AlpineLinuxDockerContainer中安裝“MicrosoftAccessDriver(*.mdb,*.accdb)”驅動程式
