Docker Build не удалось на NPM Установить, причина: Connect Econnrefused 104.16.17.35:443

У меня сложная проблема, получив мою контейнер докера вверх, он показывает некоторую странную ошибку в консоли:

DockerFile:

FROM node:14

WORKDIR /usr/src/app/

COPY package.json package.json
COPY server.js server.js

RUN ping -c 4 google.com
RUN  npm config set registry https://registry.npmjs.com/
RUN echo "${http_proxy}" && echo "${HTTP_PROXY}" 

RUN npm install
# COPY . .

EXPOSE 3000

CMD ['npm', 'start']

, когда я запускаю команду docker build

$ docker build -t myapp .

Ошибка я получаю:

Sending build context to Docker daemon  947.7kB
Step 1/7 : FROM node:14
 ---> 7bef16bb2cf1
Step 2/7 : WORKDIR /usr/src/app/
 ---> Using cache
 ---> 90402606c386
Step 3/7 : COPY package.json ./
 ---> Using cache
 ---> b839b81ee876
Step 4/7 : RUN npm install
 ---> Running in 64378581f715
npm ERR! code ECONNREFUSED
npm ERR! errno ECONNREFUSED
npm ERR! FetchError: request to https://registry.npmjs.org/@slack%2fevents-api failed, reason: connect ECONNREFUSED 104.16.18.35:443
npm ERR!     at ClientRequest.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-fetch-npm/src/index.js:68:14)
npm ERR!     at ClientRequest.emit (events.js:315:20)
npm ERR!     at TLSSocket.socketErrorListener (_http_client.js:469:9)
npm ERR!     at TLSSocket.emit (events.js:315:20)
npm ERR!     at emitErrorNT (internal/streams/destroy.js:106:8)
npm ERR!     at emitErrorCloseNT (internal/streams/destroy.js:74:3)
npm ERR!     at processTicksAndRejections (internal/process/task_queues.js:80:21)
npm ERR!  FetchError: request to https://registry.npmjs.org/@slack%2fevents-api failed, reason: connect ECONNREFUSED 104.16.18.35:443
npm ERR!     at ClientRequest.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-fetch-npm/src/index.js:68:14)
npm ERR!     at ClientRequest.emit (events.js:315:20)
npm ERR!     at TLSSocket.socketErrorListener (_http_client.js:469:9)
npm ERR!     at TLSSocket.emit (events.js:315:20)
npm ERR!     at emitErrorNT (internal/streams/destroy.js:106:8)
npm ERR!     at emitErrorCloseNT (internal/streams/destroy.js:74:3)
npm ERR!     at processTicksAndRejections (internal/process/task_queues.js:80:21) {
npm ERR!   type: 'system',
npm ERR!   errno: 'ECONNREFUSED',
npm ERR!   code: 'ECONNREFUSED'
npm ERR! }
npm ERR! 
npm ERR! If you are behind a proxy, please make sure that the
npm ERR! 'proxy' config is set properly.  See: 'npm help config'

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2021-03-02T08_20_08_546Z-debug.log
The command '/bin/sh -c npm install' returned a non-zero code: 1

Я на Ubuntu 20.4, и это просто простое приложение узла с файлом Server.js. Дайте мне знать, если вам нужно что-нибудь еще от меня, чтобы исправить это. Заранее спасибо за вашу помощь!

0
задан 5 March 2021 в 19:58

1 ответ

Вы обычно можете обновить все ключи сразу с помощью:

sudo apt-key adv --refresh-keys --keyserver keyserver.ubuntu.com

это сработало для меня

-121--912318-

Здесь удобно использовать bash DEBUG trap. Ref https://www.gnu.org/software/bash/manual/bash.html#index-trap

Если notify.sh содержит

#!/bin/bash

has_been_notified=false
notify() {
    $has_been_notified && return
    if [[ -v a ]] && ((a == 25)); then
        echo "This is the notification: value is $a"
        has_been_notified=true
    fi
}

while getopts :n opt; do
    [[ $opt == n ]] && trap notify DEBUG
done
shift $((OPTIND - 1))

a=23
while ((a <= 27)); do
    echo $((a++))
done

Обратите внимание, что вместо переменной $ notify используются параметры командной строки. Используйте все, что вам удобно.

Выполняется:

$ bash notify.sh   # no notify
23
24
25
26
27

$ bash notify.sh -n    # with notify
23
24
This is the notification: value is 25
25
26
27

ловушки DEBUG вызываются перед каждой командой (подробные сведения см. в руководстве). Вот почему я добавил флаг «has_been_notified», поэтому уведомления появляются только один раз.

Это довольно тяжелый молоток для этой работы, но bash не предоставляет никаких более тонких ловушек, например ловушка для, когда переменная получает новое значение.


Без параметра командной строки:

#!/bin/bash
notify_flag=false

has_been_notified=false
notify() {
    $has_been_notified && return
    if [[ -v a ]] && ((a == 25)); then
        echo "This is the notification: value is $a"
        has_been_notified=true
    fi
}

[[ $notify_flag == true ]] && trap notify DEBUG

a=23
while ((a <= 27)); do
    echo $((a++))
done
-121--909020-

Возможна ошибка при обработке безопасного соединения с registry.npmjs.org

Кроме того, шаги, показанные в выходных данных ошибки, не соответствуют вашему файлу Dockerfile (например: отсутствует вывод RUN ping -c 4 google.com ), возможно, вы отредактировали свои файлы после этого, чтобы проверить, работает ли разрешение DNS, и я считаю, что это так, потому что npm install ошибка отображения сервера ip.

Чтобы лучше определить ошибку, можно добавить новый шаг в файл Dockerfile (перед RUN npm install ):

RUN curl -v https://registry.npmjs.com/

Затем выполните команду build еще раз, завиток попытается подключиться к URL-адресу, и флаг -v выведет много сведений, включая подтверждение tls. Это поможет понять, что происходит на самом деле.

Побочные примечания:

  • Вы можете добавить -no-cache в команду сборки docker, она заставит docker выполнить каждую команду из вашего файла Dockerfile (а не только команды, которые приходят после новой/обновленной команды): docker build --no-cache -t myapp. Иногда может потребоваться новая сборка.
  • Вы можете добавить --pull в команду docker build, она заставит docker получить последнюю версию вашего базового образа: docker build --pull -t myapp. Используйте, если известно, что база обновлена.
1
ответ дан 18 March 2021 в 23:29

Другие вопросы по тегам:

Похожие вопросы: