2017-09-09 31 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 

您的每一次开发人员在工作站上添加一个新的包,他应该重新启动容器。

相关问题