簡體   English   中英

使用 docker-compose.yml 的父文件夾中的目錄作為卷

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM