node.js - 在 docker 中安装 npm 依赖项并从 volume 进行测试

标签 node.js docker npm development-environment dependency-management

我想使用 Docker 为一个简单的 node.js 项目创建开发环境。我想在 docker 容器中安装我的项目的依赖项(它们都是 npm 包)(这样它们就不会触及我的主机)并且仍然使用卷挂载我的代码。所以,容器应该能够 在我安装卷的路径中找到 node_modules 文件夹,但我不应该从主机上看到它。

这是我的 Dockerfile:

FROM node:6


RUN mkdir /code
COPY package.json /code/package.json
WORKDIR /code

RUN npm install

这是我运行它的方式:

docker build --tag my-dev-env .

docker run --rm --interactive --tty --volume $(pwd):/code my-dev-env npm test

这是我的 package.json:

  {
    "private": true,
    "name": "my-project",
    "version": "0.0.0",
    "description": "My project",
    "scripts": {
      "test": "jasmine"
    },
    "devDependencies": {
      "jasmine": "2.4"
    },
    "license": "MIT"
  }

失败是因为找不到jasmine,所以并没有真正安装它:

> jasmine

sh: 1: jasmine: not found

我想要的东西能用Docker完成吗?另一种方法是全局安装软件包。我也试过 npm install -g 无济于事。

我在 Debian 上使用 Docker 版本 1.12.1,构建 23cf638。

最佳答案

解决方案是还将 /code/node_modules 声明为一个卷,只是不将其绑定(bind)安装到主机中的任何目录。像这样:

docker run --rm --interactive --tty --volume /code/node_modules --volume $(pwd):/code my-dev-env npm test

正如@JesusRT 所指出的,npm install 工作得很好,但是绑定(bind)安装 $(pwd)/code 单独是阴影图像中 /code 的现有内容。我们可以通过将容器中的 /code 声明为数据卷来恢复我们想要的任何内容——在本例中,只是 /code/node_modules,如上所示。

Docker-compose: node_modules not present in a volume after npm install succeeds 中已经讨论了一个非常相似的问题.

关于node.js - 在 docker 中安装 npm 依赖项并从 volume 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087727/

相关文章:

docker - Docker应用容器引擎启动失败

git - 无法连接到 github.com 端口 443 : Connection refused, 引导失败,Discourse Docker

node.js - 在电子构建器中配置 pkg 选项脚本的最佳方法是什么?

node.js - 在 Node.js 脚本文件中无法访问环境变量

node.js - `require("模块的差异") ;` to ` 需要 ("module").function;`

docker - 在 kubernetes (GKE) 上手动删除未使用的图像

javascript - 如何使用 npm 发布客户端脚本?

linux - 如何以 apache 用户身份运行 npm 命令

Node.JS/Passport - ServerResponse.OutgoingMessage.setHeader 处的错误 : Can't set headers after they are sent.

mysql - 历史更新mysql node js