2017-04-07 95 views
0

不工作這是我Dockerfile:NPM安裝在碼頭工人

FROM node:7 

RUN apt-get update && apt-get install -y --no-install-recommends \ 
    rubygems build-essential ruby-dev \ 
    && rm -rf /var/lib/apt/lists/* 

RUN npm install -gq gulp bower 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
COPY . /usr/src/app 

RUN npm install 

CMD ["gulp", "start:dev"] 

當我建立的形象,故宮安裝命令很少輸出和真的很快執行。我實際上是通過docker-compose構建的,它有一個卷裝 - 我看不到在我的軟管上創建的node_modules文件夾。在此映像上啓動容器時,我可以看到沒有node_modules文件夾。然後我執行npm install並開始工作 - 安裝所有軟件包需要2-3分鐘,並且確實創建了node_modules文件夾。

這裏發生了什麼?我究竟做錯了什麼?爲什麼不在編譯時安裝npm,但在運行時運行?

+1

您提到了一個卷,但沒有顯示在您包含的任何命令或文​​件中。請包括您的docker-compose.yml並輸出顯示錯誤。 – BMitch

回答

0

npm install應該根據您的Dockerfile工作。你可以看到創建的文件,如果你沒有安裝的卷(DIRNAME:在您docker-compose.yml所在地):運行圖像

docker run --rm -it DIRNAME_node ls -ahl /usr/src/app

隨着docker build,所有數據都存儲在圖像中。所以,它的目的是看不到在主機上創建的任何文件。

如果您安裝一個卷(通常在Linux中,也是在Docker容器中),它可以是overlays the directory。所以你看不到在構建步驟中創建的node_modules

我建議你根據Docker映像本身進行測試,不要裝入卷。然後你有一個immutable Docker image這對部署更好。