gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:41:51 24 4
gpt4 key购买 nike

我想使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com