[英]Docker-compose volume mount before run
我有一個Dockerfile,我指的是docker-compose.yml。
我希望docker-compose.yml中的卷掛載發生在Dockerfile中的RUN
之前。
Dockerfile:
FROM node
WORKDIR /usr/src/app
RUN npm install --global gulp-cli \
&& npm install
ENTRYPOINT gulp watch
泊塢窗,compose.yml
version: '2'
services:
build_tools:
build: docker/gulp
volumes_from:
- build_data:rw
build_data:
image: debian:jessie
volumes:
- .:/usr/src/app
首先完成Dockerfile,然后從docker-compose安裝它是完全合理的,但有沒有辦法解決它。
我想保持Dockerfile的通用性,同時從compose中傳遞更多特定的位。 也許這不是最好的做法?
Erik Dannenberg是正確的,音量分層意味着我試圖做的事情毫無意義。 (如果您想閱讀更多內容, Docker網站上還有另一個非常好的解釋)。 如果我想讓Docker執行npm install
那么我可以這樣做:
FROM node
ADD . /usr/src/app
WORKDIR /usr/src/app
RUN npm install --global gulp-cli \
&& npm install
CMD ["gulp", "watch"]
但是,這不適合作為我的情況的解決方案。 目標是使用NPM來安裝項目依賴項,然后運行gulp來構建我的項目。 這意味着我需要對項目文件夾進行讀寫訪問, 並且在容器消失后需要保留。
安裝卷后我需要做兩件事,所以我想出了以下解決方案......
泊塢窗/一飲而盡/ Dockerfile:
FROM node
RUN npm install --global gulp-cli
ADD start-gulp.sh .
CMD ./start-gulp.sh
泊塢窗/一飲而盡/ start-gulp.sh:
#!/usr/bin/env bash
until cd /usr/src/app && npm install
do
echo "Retrying npm install"
done
gulp watch
泊塢窗,compose.yml:
version: '2'
services:
build_tools:
build: docker/gulp
volumes_from:
- build_data:rw
build_data:
image: debian:jessie
volumes:
- .:/usr/src/app
所以現在容器啟動一個bash腳本,它將不斷循環,直到它可以進入目錄並運行npm install
。 這仍然非常脆弱,但它確實有效。 :)
在Docker構建期間無法裝入主機文件夾或卷。 允許這會損害構建的可重復性。 在Docker構建期間訪問本地數據的唯一方法是構建上下文,它是傳遞給build
命令的PATH
或URL
中的所有內容。 請注意, Dockerfile
需要存在於上下文中的某個位置。 有關詳細信息,請參閱https://docs.docker.com/engine/reference/commandline/build/ 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.