docker - Docker 在 NPM 安装时被阻止 - 套接字超时
问题描述
我有一个运行节点的简单 Dockerfile,这是配置:
FROM node:latest
WORKDIR /usr/src/auth-starter-server
COPY ./ ./
RUN npm install
CMD ["sh"]
在 docker-compose.yml 上使用的是这样的:
version: "3.8"
services:
# Node Server
auth-starter-server:
container_name: server
restart: unless-stopped
build: ./
command: npm run start:live
working_dir: /usr/src/auth-starter-server
ports:
- "5000:5000"
volumes:
- ./:/usr/src/auth-starter-server
从一天到另一天,我无法再构建图像。开始没有问题,
Creating network "react-auth-starter_default" with the default driver
Building auth-starter-server
Step 1/5 : FROM node:latest
---> 6f7f341ab8b8
Step 2/5 : WORKDIR /usr/src/auth-starter-server
---> Using cache
---> b25f7c08d3eb
Step 3/5 : COPY ./ ./
---> Using cache
---> 2a06e76bab32
Step 4/5 : RUN npm install
---> Running in 0034d6afa38e
但是当使用docker-compose up --build
(或简单地docker build -t auth-starter-server .
)构建时,它只会在“npm install”上超时,并返回以下错误:
npm notice
npm notice New minor version of npm available! 7.0.15 -> 7.3.0
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v7.3.0>
npm notice Run `npm install -g npm@7.3.0` to update!
npm notice
npm ERR! code ERR_SOCKET_TIMEOUT
npm ERR! errno ERR_SOCKET_TIMEOUT
npm ERR! request to https://registry.companyregistry.com/yargs-parser/-/yargs-parser-13.1.2.tgz failed, reason: Socket timeout
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-12-21T15_37_42_509Z-debug.log
ERROR: Service 'auth-starter-server' failed to build : The command '/bin/sh -c npm install' returned a non-zero code: 1
我注意到的一点是它没有使用官方的 npm 注册表,即使它还没有被设置为默认注册表。这里是 npm 配置(通过运行获得npm config ls -l
):
cli configs
long = true
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.14.9 node/v15.4.0 darwin x64"
; builtin config undefined
prefix = "/usr/local"
; default values
access = null
allow-same-version = false
also = null
always-auth = false
audit = true
audit-level = "low"
auth-type = "legacy"
before = null
bin-links = true
browser = null
ca = null
cache = "/Users/ale917k/.npm"
cache-lock-retries = 10
cache-lock-stale = 60000
cache-lock-wait = 10000
cache-max = null
cache-min = 10
cafile = undefined
cert = null
cidr = null
color = true
commit-hooks = true
depth = null
description = true
dev = false
dry-run = false
editor = "vi"
engine-strict = false
fetch-retries = 2
fetch-retry-factor = 10
fetch-retry-maxtimeout = 60000
fetch-retry-mintimeout = 10000
force = false
format-package-lock = true
fund = true
git = "git"
git-tag-version = true
global = false
global-style = false
globalconfig = "/usr/local/etc/npmrc"
globalignorefile = "/usr/local/etc/npmignore"
group = 20
ham-it-up = false
heading = "npm"
https-proxy = null
if-present = false
ignore-prepublish = false
ignore-scripts = false
init-author-email = ""
init-author-name = ""
init-author-url = ""
init-license = "ISC"
init-module = "/Users/ale917k/.npm-init.js"
init-version = "1.0.0"
json = false
key = null
legacy-bundling = false
link = false
local-address = undefined
loglevel = "notice"
logs-max = 10
; long = false (overridden)
maxsockets = 50
message = "%s"
; metrics-registry = null (overridden)
node-options = null
node-version = "15.4.0"
noproxy = null
offline = false
onload-script = null
only = null
optional = true
otp = null
package-lock = true
package-lock-only = false
parseable = false
prefer-offline = false
prefer-online = false
; prefix = "/usr/local/Cellar/node/15.4.0" (overridden)
preid = ""
production = false
progress = true
proxy = null
read-only = false
rebuild-bundle = true
registry = "https://registry.npmjs.org/"
rollback = true
save = true
save-bundle = false
save-dev = false
save-exact = false
save-optional = false
save-prefix = "^"
save-prod = false
scope = ""
script-shell = null
scripts-prepend-node-path = "warn-only"
searchexclude = null
searchlimit = 20
searchopts = ""
searchstaleness = 900
send-metrics = false
shell = "/bin/zsh"
shrinkwrap = true
sign-git-commit = false
sign-git-tag = false
sso-poll-frequency = 500
sso-type = "oauth"
strict-ssl = true
tag = "latest"
tag-version-prefix = "v"
timing = false
tmp = "/var/folders/2t/36_q44_s62d1b57hnl0l8khw0000gn/T"
umask = 18
unicode = true
unsafe-perm = true
update-notifier = true
usage = false
user = 0
; user-agent = "npm/{npm-version} node/{node-version} {platform} {arch} {ci}" (overridden)
userconfig = "/Users/ale917k/.npmrc"
version = false
versions = false
viewer = "man"
它停止构建的原因可能是因为它指向了错误的注册表吗?如果是这样,如何解决?
另一方面,我也注意到关于 npm 更新的警告;如何更新 docker 镜像中的 npm 包?
任何答案都非常感谢,所以感谢您的投入!
解决方案
发现我公司的服务器出现故障,导致相关注册表和类似情况关闭。
这导致无法处理软件包安装,因为出于某种原因,我似乎有来自公司自定义注册表的依赖项剩余。
为了解决这个问题,我:
首先创建不同的 npmrc 配置文件,以确保我们在处理特定项目时使用适当的注册表 - 可以在此处找到参考
然后删除
node_modules
并package-lock.json
清理剩菜将配置文件设置为指向开源注册表 ( https://registry.npmjs.org/ )
npmrc <profile>
(可选):只需运行即可检查活动注册表配置文件
npmrc
重新安装所有软件包
npm install
重建 docker-image
docker-compose up --build
并完成了这项工作
希望这可以在未来帮助其他人
推荐阅读
- c++ - 将带有 3rd 方库的 c++ 项目编译到 WebAssembly
- unity3d - URP - 附加灯光阴影,但不投射
- android - Android ViewPager2 片段销毁行为不符合 offscreenPageLimit
- pandas - 在哪里/如何在 Google Colabs 中安全地存储 API 密钥?
- django - ProgrammingError django postgresql 托管
- amazon-web-services - 在 AWS 中启动 EC2 失败
- python - 如何在 python(可导入)脚本中仅公开少数“名称”(变量/函数)
- javascript - HttpErrorResonse 位置 0 Firebase 中 JSON 中的意外令牌 S
- java - Maven avro 插件给出了尚不支持模式的错误
- reactjs - 尝试发出文档时无法读取未定义的属性“发出”