2016-08-04 31 views
1

我遇到了一個問題,我確定這對docker專家來說是非常明顯的,但是對我來說卻是丟失了。docker webpack編譯的文件在運行時丟失

下面是我的dockerfile,其中我添加了幾個「ls」,因此我可以查看webpack生成的文件。

第一個 「LS」 是正確顯示

Step 8 : RUN ls server/public 
---> Running in 67bc7ee5f832 
bundle.css 
bundle.js 
index.html 

但第二LS不

web_1 | index.html 

Dockerfile:

FROM node:6.2 

# Create app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
COPY package.json /usr/src/app/ 

RUN npm i 

COPY . /usr/src/app/ 

# Build Static Resources 
RUN npm run build 

# ls here shows correct files 
RUN ls server/public 

# Bundle app source 

ENV NODE_ENV=production 

# ls here doesn't show compiled files 
CMD ls server/public && npm start 

EXPOSE 3000 

我缺少什麼?爲什麼nodejs運行後,這些bundle.css/js不在瀏覽器中?

如何檢查目錄是否複製正確?

感謝

回答

1

RUN定義圖像的docker build期間執行的一個步驟。

CMD定義當您的容器爲docker run時執行的默認命令(或傳遞給ENTRYPOINT的參數(如果已定義))。

請注意,Docker也會緩存圖層,因此如果您執行另一次構建,如果Docker在同一先前圖層的散列上查找此精確命令的結果圖像,則將跳過RUN ls

要看看你的容器內,你可以運行一個shell瀏覽它:

docker run -it --rm your_image_name /bin/bash

既然你通過/bin/bash,默認CMD將被忽略,只有一個外殼將啓動。

+0

我的問題是我試圖把我的倉庫拉到遠程服務器上;在那裏建立圖像,然後使用「docker-compose up」,這不起作用(仍然不知道爲什麼)。 相反,現在我在本地構建映像,將它們上載到Docker集線器,然後將它們拖放到遠程服務器上,並單獨運行它們,並按預期方式運行 – Lucas

+1

回顧此問題,我預計問題是卷裝入撰寫文件。沒有這個文件,這只是一個猜測。 @Nachiket,請用你的文件打開一個新的問題,評論不是一個問題和答案的好地方。 – BMitch