簡體   English   中英

Docker在運行之前組合卷安裝

[英]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命令的PATHURL中的所有內容。 請注意, Dockerfile需要存在於上下文中的某個位置。 有關詳細信息,請參閱https://docs.docker.com/engine/reference/commandline/build/

暫無
暫無

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

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