【发布时间】:2021-04-02 12:26:09
【问题描述】:
我有一个简单的 nodejs 应用程序。在尝试加载库时,我使用了 npm link library1 library2,它创建了指向 /usr/local/lib/node_modules 的符号链接。我正在尝试使用 Dockerfile 中的以下说明构建相同的 docker 映像
FROM node:13-alpine
ENV MONGO_DB_USERNAME=admin \
MONGO_DB_PWD=password
RUN mkdir -p /home/app
COPY ./app /home/app
WORKDIR /home/app
RUN npm install
CMD ["node", "server.js"]
现在在构建图像时,它错误地输出了RUN npm install 部分,并在终端中显示以下输出
npm ERR! syscall access
npm ERR! path /home/app/node_modules/body-parser
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, access '/home/app/node_modules/body-parser'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-12-23T21_41_24_539Z-debug.log
在我的代码位置删除 node_modules 文件夹后,我能够成功构建映像。当我通过代码位置的npm install libary1 library2 下载库时,我也成功地构建了图像。
我的问题是
- 为什么我使用全局库时映像构建过程出错
- 在哪里可以找到终端中指示的日志文件。我的本地笔记本电脑没有 /root/ 文件夹。
【问题讨论】:
-
您能否提供完整的 Dockerfile 或至少它来自哪个基础映像?此外,npm 错误表示日志位于 Docker 容器内的
/root文件夹中,您是否需要通过 shell 访问容器或复制文件(使用 Docker 的exec或cp命令。 -
很抱歉错过了完整的 Dockerfile。更新了它。我需要执行哪个容器来获取日志。我注意到很少有临时容器被启动和停止(而不是在映像构建成功的情况下被删除)。我试图重新启动停止的容器,但它会在一分钟内停止,而不是让我更改 exec
-
您如何尝试启动已停止的容器?您是否正在使用诸如
docker run -it CONTAINER bash之类的命令?此错误似乎与 npm 包文件有关,但这可能有助于获取这些日志。 -
我不确定您的意思是 docker run 还是 docker exec。但是我使用'docker ps -a'然后使用'docker start
'和'docker exec -it bash'获得了容器ID。 docker exec 将在一分钟内退出,因为为构建映像而创建的临时容器将停止
标签: node.js docker node-modules docker-build