【问题标题】:How to add npm packages to docker images w/o remaking image or container?如何在不重新制作图像或容器的情况下将 npm 包添加到 docker 图像?
【发布时间】:2018-02-18 09:39:58
【问题描述】:

问题: 如何安装新包并获取 docker 映像和容器以识别更改、安装和重新运行而无需开发人员交互?

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] startingnode ./src/index.js`

问题:

npm install cors --save将添加 cors 包

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

问题是我的 docker 容器中什么都不会更新 :( 我不希望开发人员必须重新制作图像或必须重新运行容器: docker build . -t testImage docker run -p 8191:8191 -v $(pwd)/server/src:/var/www/src testImage

【问题讨论】:

  • docker exec <container id> npm install cors --save 呢?
  • 你有解决方案吗?请分享

标签: node.js docker npm dockerfile npm-install


【解决方案1】:

看看 ENTRYPOINT 和 CMD 是如何工作的,如果你想在生产和开发中使用相同的 Dockerfile,你可以创建一个入口点脚本,如果没有提供参数,则以生产模式运行,如果参数类似于开发,则以开发模式运行.

使用 --save-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

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

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2019-05-12
    相关资源
    最近更新 更多