gpt4 book ai didi

node.js - docker找不到本地nodejs模块

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:26 25 4
gpt4 key购买 nike

我有一个名为 my-common 的 Nodejs 模块,其中包含几个 js 文件。这些 js 文件导出在许多其他模块中使用的函数。

我的另一个模块(称为演示)包含对公共(public)模块的依赖,如下所示:

"dependencies": {
"my-common": "file:../my-common/",
}

当我转到演示目录并运行 npm start 时,它工作正常。然后,我使用以下 Dockerfile 构建一个 docker 镜像:

来自 Node :8
ENV NODE_ENV=生产
工作目录/usr/src/app
复制包*.json ./
运行 npm install --only=生产
复制 。 。
曝光 3000
CMD [“npm”,“开始”]

当我启动图像时,出现错误,无法找到 my-common。我猜测 my-common 模块没有被复制到演示模块的 node_modules 目录中。

我尝试过 npm link,但我认为需要 sudo 权限来安装全局模块是一个非常非常非常糟糕的主意,因为这可能会在其他系统上导致问题。

我已尝试在根目录中使用 npm install my-common/ 并将模块安装到我的 HOME_DIR/node_modules 中,但是该模块也没有安装到 docker 容器中。

在我看来,这个非常简单的问题似乎没有答案。我该如何解决这个问题?

最佳答案

所以,我看到了一些不同的事情。

当 Docker 在镜像中运行 npm install --only=product 时,Docker 会看到 file:../my-common/ 并查看 Docker 镜像的 WORKDIR 的父目录,即 /usr/src/app。由于此时除了 package.json 之外没有任何内容被复制到镜像中,因此它找不到该模块。如果您想在本地安装所有内容,然后将其移至镜像中,可以通过从 Dockerfile 中删除 npm install --only=product 命令来实现,并确保您的 .dockerignore 文件不会忽略 node_modules 目录。

如果要在镜像中安装模块,需要专门将 my-common 目录复制到 docker 镜像中。但是,Docker 不允许您将某些内容从父目录复制到镜像中。任何本地内容都必须位于 Dockerfile 的上下文中。您有几个选择:

选项 1:my-common/ 移至项目的根目录,更新 Dockerfile 以复制该文件夹并更新 package.json 以指向正确的位置。

Dockerfile:

FROM node:8
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY my-common/ ./
COPY package*.json ./
RUN npm install --only=production
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]

package.json:

"dependencies": {
"my-common": "file:./my-common/",
}

选项 2:将 Docker 镜像的上下文上移一个目录。我的意思是,将 Dockerfile 移至与 my-common 目录相同的级别,并更新 Dockerfile 和 package.json 以反射(reflect)该更改。

Dockerfile:

FROM node:8
ENV NODE_ENV=production
WORKDIR /usr/src/app
RUN mkdir my-common
COPY ./my-common ./my-common
COPY ./<projectName>/package*.json .
RUN npm install --only=production
COPY ./<projectName> .
EXPOSE 3000
CMD [ "npm", "start" ]

package.json:

"dependencies": {
"my-common": "file:./my-common/",
}

关于node.js - docker找不到本地nodejs模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53379945/

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