[英]Docker volume not being mounted in container
我正在嘗試使用 docker-compose 安裝卷,以便在開發時可以熱重載一些 C 代碼。 我之前使用過 Docker 幾次,並且在處理 nodejs 網站時專門遇到了這個用例,但我在這里完全不知所措。
我的docker-compose.yml
和Dockerfile
已被完全剝離到最低限度。 我想將當前目錄(所有源代碼)掛載到容器中。 我的Dockerfile
只是安裝了一些依賴項,設置了工作目錄,然后嘗試運行 makefile 而我的docker-compose.yml
添加了卷。 結果是一個容器無法訪問已安裝的卷和生成的代碼(Makefile 沒有問題,因為它在主機目錄上工作並且在復制時,而不是使用卷)。 有沒有人發現這兩個文件有什么問題? 似乎/cfs
文件夾甚至沒有在容器中創建。 我嘗試將其安裝到主目錄無濟於事。
version: '3'
services:
cfs:
volumes:
- ./:/cfs
build:
context: ./
dockerfile: ./Dockerfile
networks:
- default
networks:
default:
internal: true
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.