У меня сложная проблема, получив мою контейнер докера вверх, он показывает некоторую странную ошибку в консоли:
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. Дайте мне знать, если вам нужно что-нибудь еще от меня, чтобы исправить это. Заранее спасибо за вашу помощь!
Вы обычно можете обновить все ключи сразу с помощью:
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.
Используйте, если известно, что база обновлена.