在 Docker 容器内安装新的节点依赖项

Ric*_*ard 5 node.js npm docker docker-compose

考虑使用 Docker 的以下开发环境:

# /.env
CONTAINER_PROJECT_PATH=/projects/my_project

# /docker-compose.yml
version: '2'
services:
  web:
    restart: always
    build: ./docker/web
    working_dir: ${CONTAINER_PROJECT_PATH}
    ports:
      - "3000:3000"
    volumes:
      - .:${CONTAINER_PROJECT_PATH}
      - ./node_modules:${CONTAINER_PROJECT_PATH}/node_modules

# /docker/web/Dockerfile
FROM keymetrics/pm2:latest-alpine
FROM node:8.11.4

ENV NPM_CONFIG_PREFIX=/home/node/.npm-global

RUN mkdir -p /projects/my_project
RUN chown node:node /projects/my_project

# If you are going to change WORKDIR value, 
# please also consider to change .env file
WORKDIR /projects/my_project

USER node
RUN npm install pm2 -g
CMD npm install && node /projects/my_project/src/index.js
Run Code Online (Sandbox Code Playgroud)

如何在容器内安装新模块?由于属于用户npm install,因此在主机上将不起作用。有什么办法可以从容器中运行它吗?node_moduleroot

编辑:是否有一些“单行”可以在容器外部运行来安装模块?

Mur*_*nik 3

假设您不想编辑Dockerfile,您始终可以使用以下标志在正在运行的容器上执行命令-it

$ docker run -it <container name> /usr/bin/npm install my_moduel
Run Code Online (Sandbox Code Playgroud)