Docker卡在npm install阶段

7

我有一个想要进行Docker容器化的项目。在我的计算机上,我可以顺利运行npm installnpm build命令,但是使用Docker构建时遇到了一些问题。

Docker输出:

Sending build context to Docker daemon  56.96MB
Step 1/7 : FROM node:12.2.0-alpine
---> f391dabf9dce
Step 2/7 : WORKDIR /app
---> Using cache
---> b50a8efbf074
Step 3/7 : ENV PATH /app/node_modules/.bin:$PATH
---> Using cache
---> 3358967a13ab
Step 4/7 : COPY package.json /app/package.json
---> Using cache
---> 851ac31a0adb
Step 5/7 : RUN npm install
---> Running in 8cc36a435cec
npm WARN deprecated core-js@1.2.7: core-js@<2.6.8 is no longer maintained. Please, upgrade to core-js@3 or at least to actual version of core-js@2.

这里卡住了:

Dockerfile:

# base image
FROM node:12.2.0-alpine

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY package.json /app/package.json
RUN npm install
RUN npm install react-scripts@3.0.1 -g --silent

# start app
CMD ["npm", "start"]

我已经用其他 Dockerfile 做过这个操作,但结果都是一样的。

package.json:

{
  "name": "front",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "axios": "^0.18.0",
    "bootstrap": "^4.3.1",
    "express": "^4.17.0",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-router": "^5.0.0",
    "react-router-dom": "^5.0.0",
    "react-scripts": "2.1.8"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}

移除 --silent 并检查日志。 - rdas
@rdas 它无法到达那个位置,因为它卡在第5阶段,那就是npm install。 - behnam
我运行了你的代码,一切都正常。你使用的Docker版本是什么? - rafaelncarvalho
离题了,但是你的包中已经有react-scripts,所以你正在尝试在docker中安装2.1.8和3.0.1。只需在package中提高版本号,就可以完全避免这种情况。 - Rikin
你是否在代理后面? - Leonard AB
显示剩余4条评论
5个回答

0

我最近也遇到了同样的问题。

我添加了以下命令npm ci --force,然后加载花费了相当长的时间,但最终成功了。

为什么要使用npm ci而不是npm i

  • 该项目必须有现有的package-lock.json或npm-shrinkwrap.json文件。
  • 如果包锁中的依赖项与package.json中的依赖项不匹配,则npm ci将退出并显示错误,而不是更新包锁。
  • npm ci只能一次安装整个项目:无法使用此命令添加单个依赖项。
  • 如果已经存在node_modules,则在npm ci开始安装之前会自动删除它。
  • 它永远不会写入package.json或任何包锁:安装基本上是冻结的。

0

有时由于限制问题,我们不得不在npm配置中使用代理。 但是大多数情况下,使用yarn而不是npm可以解决这个问题。


0

所以,这可能是一个临时解决方案,直到问题得到妥善解决,但您可以使用

npm config set registry http://registry.npmjs.org/

我已经在Docker环境中使用过它并且效果还不错。


0
每当您运行docker run my-image时,它将在新容器中运行,以前的容器保持未使用状态, 我们可以使用docker build location-of-the-Dockerfile --no-cache开关来不使用缓存的镜像,但这对我没有起作用 在我的情况下,删除未使用的容器和镜像解决了问题,

删除所有容器 > docker rm $(docker ps -aq)
如果需要,删除所有镜像 >> docker image rm $(docker images -q)


-4
我遇到了同样的问题。我只是等了一个小时,然后它就进入了下一步。
编辑: 在构建npm安装时,会下载所有软件包,这需要时间,具体取决于您的应用程序大小需要多长时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接