2016-02-29 52 views
0

我正在開發使用webpack服務器的NodeJS應用程序。 Webpack服務器被配置爲負責自動文件重新加載。我希望將它掛載爲,這樣每次更改代碼時都不需要重新生成映像。我希望node_modules文件夾在圖像中可用,以便每次啓動容器時都不必獲取模塊。使用Docker與live relaod開發NodeJS應用程序

其實源代碼和node_modules應該在同一個層級。但問題是,當我使用卷裝載的源代碼node_modules(因爲它是圖像的一部分)將會因使用卷裝路徑而丟失。 有什麼辦法可以讓這件事情起作用嗎?

回答

1

我很瞭解這個問題!

當你掛載一個卷時,它將刪除容器內安裝的目錄內的文件(從技術上說,它不會刪除它們,但是出於我們的目的)。這是因爲這些文件是BUILD的一部分,而不是RUN的一部分。

有3個補丁:

1 - 而不是做一個npm install在構建時的,這樣做在運行時 - 例如當您執行docker run命令。在安裝目錄內的運行時創建的容器文件將可以從主機獲得。

ENTRYPOINT npm install (something like that) 

2 - 構建過程中的文件在其他地方複製(如/溫度/ node_modules),然後將它們拷貝回在運行時

ENTRYPOINT scriptToCopyFilesBackIntoNodeModules.sh 

無論是前兩個應該使用,如果你需要訪問來自主機。如果您需要使用其他容器,請使用volumes_from - 這只是簡單的工作,沒有任何上述解決方法。

container1: 
    volumes: /node_modules 

container2: 
    volumes_from: container1 

就是這樣 - 上面的語法是docker-compose語法。

+0

如果我使用這兩個中的任何一個,我會有process_id「1」問題嗎? – Apps

+0

這裏給出了3個解決方案,不知道什麼是進程ID問題 – danday74