2017-09-09 48 views
1

問題: 如何安裝新軟件包並獲取docker映像和容器以識別更改,安裝和重新運行而不與開發人員進行交互?如何將npm包添加到碼頭圖像而不用重新制作圖像或容器?

的package.json通知,我們只有1包

"scripts": { 
    "start": "node_modules/.bin/nodemon" 
}, 
"dependencies": { 
    "express": "4.15.4" 
} 

dockerfile

FROM node:8.4.0 

ENV HOME /var/www 
WORKDIR ${HOME} 

COPY server/package.json server/tsconfig.json server/nodemon.json $HOME/ 
RUN npm install 
EXPOSE 8191 
CMD [ "npm", "start" ] 

製作圖像

docker build . -t testImage 

運行容器

docker run -p 8191:8191 -v $(pwd)/server/src:/var/www/src testImage 

一切按預期工作[nodemon] starting節點/ SRC/index.js`

問題:

npm install cors --save將添加CORS包

"scripts": { 
    "start": "node_modules/.bin/nodemon" 
}, 
"dependencies": { 
    "express": "4.15.4", 
    "cors": "^2.8.4", 
} 

問題是什麼都不會在我的搬運工容器:( 更新我不想讓開發商不得不重拍圖像或不得不重新運行容器: docker build . -t testImage docker run -p 8191:8191 -v $(pwd)/server/src:/var/www/src testImage

+0

'docker exec npm install cors --save'? –

+0

你有這個解決方案嗎?請分享 – Developer

回答

0

看看如何入口點和CMD的作品,如果你想使用相同的Dockerfile進行生產和開發,你可以創建一個入口腳本,如果沒有參數提供作爲生產模式運行,如果像開發這樣的參數,作爲開發模式運行。

使用--save-dev保存開發包,因此在開發模式下運行時,您的容器將安裝dev依賴項。

確保您node_modules爲您.dockerignore,

你dockerfile:

FROM node:8.4.0 


ENV HOME /var/www 
WORKDIR ${HOME} 

COPY start_scrip.sh /start_scrip.sh 

COPY server/package.json server/tsconfig.json server/nodemon.json $HOME/ 
RUN npm install 
EXPOSE 8191 
ENTRYPOINT ["/start_scrip.sh"] 

一個start_scrip.sh例如:

#!/usr/bin/env bash 


function development { 
    npm install --dev # 
    npm start 
} 
function run_prod { 
    #npm start command here 
} 


if [ $# -gt 0 ] 
then 
    if [ $1 == "development" ] 
    then 
     development 
    else 
     echo "Not a valid argument" 
     exit 127 
    fi 
else 
    run_prod 
fi 


exit 0 

請務必於chmod + X你的腳本,所以它可以在容器內執行。

要在開發模式下運行:

run -p 8191:8191 -v $(pwd)/server/src:/var/www/src testImage development 

您的每一次開發人員在工作站上添加一個新的包,他應該重新啓動容器。

相關問題