簡體   English   中英

Docker 卷未安裝在容器中

[英]Docker volume not being mounted in container

我正在嘗試使用 docker-compose 安裝卷,以便在開發時可以熱重載一些 C 代碼。 我之前使用過 Docker 幾次,並且在處理 nodejs 網站時專門遇到了這個用例,但我在這里完全不知所措。

我的docker-compose.ymlDockerfile已被完全剝離到最低限度。 我想將當前目錄(所有源代碼)掛載到容器中。 我的Dockerfile只是安裝了一些依賴項,設置了工作目錄,然后嘗試運行 makefile 而我的docker-compose.yml添加了卷。 結果是一個容器無法訪問已安裝的卷和生成的代碼(Makefile 沒有問題,因為它在主機目錄上工作並且在復制時,而不是使用卷)。 有沒有人發現這兩個文件有什么問題? 似乎/cfs文件夾甚至沒有在容器中創建。 我嘗試將其安裝到主目錄無濟於事。

docker-compose.yml

version: '3'

services:
  cfs:
    volumes:
      - ./:/cfs
    build:
        context: ./
        dockerfile: ./Dockerfile
    networks:
      - default
  
networks:
  default:
    internal: true    

Dockerfile

FROM ubuntu:20.04

# install dependencies
RUN apt-get -qy update                           \
    && apt-get -y install                        \
        cmake=3.16.3-1ubuntu1                    \
        make=4.2.1-1.2                           \
        gcc=4:9.3.0-1ubuntu2                     \
        g++=4:9.3.0-1ubuntu2

WORKDIR /cfs

RUN make prep
RUN make
RUN make install

大多數 Compose 設置在映像構建期間不可見。 volumes:未安裝, environment:未設置變量, networks:不可訪問。 只有立即build:塊中的設置才有效。

這意味着您應該單獨查看 Dockerfile,忽略docker-compose.yml文件。 此時, /cfs目錄為空(您無需將任何源代碼COPY到其中),因此RUN make...命令將失敗。 目錄最終會在其上安裝其他東西並不重要。

如果您只是打算在源代碼更改時重新編譯應用程序,請刪除volumes: ,將源代碼COPY到映像中,然后在您通常運行make的位置運行docker-compose build 如果您確實有可以在源更改時重建應用程序的設置,則需要設置映像的CMD以啟動該應用程序,但如果您不COPY源代碼,則無法在映像構建時構建它。 (......如果你要用一個卷覆蓋圖像的整個有趣內容,它無論如何都會丟失。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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