[英]docker-compose.yml use volume on documents starting with dot (.)
[英]Use directory in docker-compose.yml's parent folder as volume
我有以下目錄結構:
.
├── README.md
├── alice
├── docker
│ ├── compose-prod.yml
│ ├── compose-stage.yml
│ ├── compose.yml
│ └── dockerfiles
├── gauntlet
├── nexus
│ ├── Procfile
│ ├── README.md
│ ├── VERSION.txt
│ ├── alembic
│ ├── alembic.ini
│ ├── app
│ ├── poetry.lock
│ ├── pyproject.toml
│ └── scripts
nexus.Dockerfile
FROM python:3.10
RUN addgroup --system app && adduser --system --group app
WORKDIR /usr/src/pdn/nexus
COPY ../../nexus/pyproject.toml ../../nexus/poetry.lock* ./
ARG INSTALL_DEV=true
RUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi"
COPY ../../nexus .
RUN chmod +x scripts/run.sh
ENV PYTHONPATH=/usr/src/pdn/nexus
RUN chown -R app:app $HOME
USER app
CMD ["./run.sh"]
compose.yml
中的相關服務如下所示:
services:
nexus:
platform: linux/arm64
build:
context: ../
dockerfile: ./docker/dockerfiles/nexus.Dockerfile
container_name: nexus
restart: on-failure
ports:
- "8000:8000"
volumes:
- ../nexus:/usr/src/pdn/nexus:ro
environment:
- DATABASE_HOSTNAME=${DATABASE_HOSTNAME?}
env_file:
- .env
當我運行撰寫時,我收到以下錯誤:
Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "./scripts/run.sh": permission denied: unknown
沒有卷定義,服務啟動正常。 我認為這可能是因為nexus
的位置與 dockerfile 或撰寫文件有關,但上下文設置為父級。
我嘗試按如下方式定義音量:
volumes:
- ./nexus:/usr/src/pdn/nexus:ro
但我得到一個類似的錯誤,在這種情況下run.sh
找不到:並且在docker
目錄中創建了一個名為nexus
的目錄
Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "./run.sh": stat ./run.sh: no such file or directory: unknown
不知道我錯過了什么。
我有兩個意見,不知道他們是否能解決你的問題。
首先,盡管在您的 compose.yml 中,您可以引用您的父目錄,但 Dockerfile 中的情況並非如此,您不能從您在 compose.yml 文件中指定的上下文之外復制(.. 解析為您的應用程序根目錄)。 所以你應該改變這些行:
COPY ../../nexus/pyproject.toml ../../nexus/poetry.lock* ./
COPY ../../nexus .
至
COPY ./nexus/pyproject.toml ./nexus/poetry.lock* ./
COPY ./nexus .
其次,卷通過../nexus 的內容覆蓋/usr/src/pdn/nexus 中的任何內容。 這將使您對 /usr/src/pdn/nexus 的整個副本毫無用處。 如果內容相同,這可能不是問題,但是您在文件中定義的任何權限都可能消失。 因此,如果您的內容相同,您可能遇到的唯一問題是您的啟動腳本,您可以將它放在 /usr/src/pdn/nexus 之外的單獨目錄中,這樣它就不會被覆蓋,並且不要不要忘記將其正確引用到 CMD 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.