我正在为node.js微服务创建一个docker容器,并且遇到了来自另一个文件夹的本地依赖项的问题。
我使用以下命令将依赖项添加到node_modules
文件夹:
npm install -S ../dependency1(module name).
这也在package.json中添加了一个条目,如下所示:
"dependency1": "file:../dependency1".
当我运行docker-compose up -d
命令时,我收到一个错误,指出以下内容:
npm ERR! Could not install from "../dependency1" as it does not contain a package.json file.
Dockerfile:
FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN npm install
CMD [ "npm", "start" ]
EXPOSE 3000
搬运工-compose.yml:
customer:
container_name: "app_customer"
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/usr/src/app/
- /usr/src/app/node_modules
ports:
- "3000:3000"
depends_on:
- mongo
- rabbitmq
我发现文章概述了node_modules文件夹和docker中的符号链接问题以及一些概述此问题,但似乎没有提供此问题的解决方案。我正在寻找这个问题的解决方案或一个非常好的解决方法。
答案 0 :(得分:1)
Docker构建不能引用构建上下文之外的文件,这是.
文件中定义的docker-compose.yml
。
docker build
创建构建上下文中所有文件的tar包,并将其发送到Docker守护程序以进行构建。上下文目录之外的任何内容都不存在于构建中。
您可以使用context: ../
将构建上下文移动到父目录,并将您在Dockerfile
中引用的所有路径进行随机播放以匹配。请注意不要使构建上下文变大,因为它会减慢构建过程。
另一个选项是将私有npm模块发布到scope,可以在您和构建服务器有权访问的私有npm注册表上正常安装依赖项。