當我將本地build目錄掛載到 container /app/build,然后執行時docker-compose up,它將生成一個/app/build目錄,期望它存在于本地build目錄中,但那里沒有。
如果沒有掛載,容器/app/build目錄有預期檔案

uj5u.com熱心網友回復:
你想達到什么目的?在 docker compose 的構建步驟中,構建的包應該被復制到鏡像中。之后應該足以啟動映像,無需將帶有構建工件的卷安裝到正在運行的容器,因為檔案已經在映像中。
例子:

docker compose build 只修改構建容器內的內容,然后將其作為層寫入構建的鏡像。
如您所見,COPY ./package .fromDockerfile執行預期的操作,但僅限于容器內部。還有以下
RUN bash -c 'source ~/.nvm/nvm.sh \
&& nvm install 17.1.0 \
&& npm install'
執行預期的操作,因為該node_modules檔案夾存在于容器內。您也可以通過查看檔案時間戳來驗證這一點。
要獲得您想要的行為,您可以執行以下操作:
docker run --rm -it -v ${pwd}:/app ubuntu:20.04 bash
apt update
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
cd /app
cp -Rv package/* .
source ~/.nvm/nvm.sh \
&& nvm install 17.1.0 \
&& npm install
touch build/x
exit
dir .\build\
正如你在截圖中看到的,容器外的檔案系統是用這種方法修改的:

概括:
- 用于
docker compose build在容器內構建專案,無需修改外部檔案系統 - 使用
docker run -v -v ${pwd}:/app,如果你想構建修改之外的檔案系統。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/367658.html
標籤:码头工人 docker-compose 文件
下一篇:影像的“使用中”是什么意思?
