docker npm install Ошибка: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443

Я использую Docker версии 1.10.1 на RHEL 7 и получаю ошибку установки npm при использовании ниже Dockerfile. Ошибка: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443. Такая же работа с докером 1.91 на убунту 14.04. Когда я получил bash и установил inetutils-ping на контейнер, я заметил, что нигде не могу ping

root@9deb4b274c1e:/home/nodexp#ping 8.8.8.8           
PING 8.8.8.8 (8.8.8.8): 56 data bytes
^C--- 8.8.8.8 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss

Это почему? Конечно я могу пинговать от RHEL

Dockerfile

FROM node:argon
# Create user nodexp in group nodexp
RUN groupadd -r nodexp \
    && useradd -m -r -g nodexp nodexp
WORKDIR /home/nodexp
# Install app dependencies
COPY package.json /home/nodexp
RUN npm install
# Bundle app source
COPY . /home/nodexp
EXPOSE 3000
CMD [ "npm", "start" ]

и package.json

{
  "name": "mp",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "~4.13.1"

  }
}

3 ответа

Решение

Перезапуск докера с этой командой исправляет это для меня, но я не знаю почему

sudo service docker restart

Я исправляю эту проблему на основе этой статьи https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dns/

на самом деле, вы можете проверить DNS, если он не работает или нет во время вызова registry.npmjs.org

Чтобы проверить это, я сделал эти шаги, чтобы заставить это работать

Шаг 1

Запустите эту команду на busybox изображение, я буду использовать google.com для имитации запроса на подключение

>> docker run busybox nslookup google.com 
   Unable to find image 'busybox:latest' locally
   latest: Pulling from library/busybox
   f70adabe43c0: Pull complete 
   Digest: sha256:58ac43b2cc92c687a32c8be6278e50a063579655fe3090125dcb2af0ff9e1a64
   Status: Downloaded newer image for busybox:latest
   nslookup: can't resolve 'google.com'
   Server:    8.8.8.8
   Address 1: 8.8.8.8

Шаг 2

Как видно из шага 1, я получил ошибку и не могу разрешить соединение с google.com, если вы получили похожую ошибку, то сделайте это, чтобы проверить текущий маршрут DNS.

 >> nmcli dev show | grep 'IP4.DNS' 
    IP4.DNS[1]:                             192.168.2.1

Эта команда выставляет ваш IP4 DNS, который в этом случае 192.168.2.1На этом шаге вы уже знаете DNS.

Шаг 3

Давайте продолжим busybox контейнер для подключения с помощью этого DNS, запустив

 >> docker run --dns 192.168.2.1 busybox nslookup google.com
    Server:    192.168.2.1
    Address 1: 192.168.2.1 giftcard.dyndns.org

    Name:      google.com
    Address 1: 2404:6800:4003:c03::65
    ....

Шаг 4

Если ваш результат аналогичен шагу 3, значит, ваша проблема в том, что Docker не может подключиться, потому что Docker не знает, будет ли использоваться DNS, поэтому мы исправим это, сделав daemon.json файл и найдите это в /etc/docker/daemon.json, это содержание поставить.

{
  "dns": ["192.168.2.1", "8.8.8.8"] // 192.168.2.1 is value of your dns
}

Шаг 5

Перезапустите ваш докер

>> sudo service docker restart

Я столкнулся с этой же проблемой. Мое обходное решение заключалось в том, чтобы прикрепитьdocker build в известную работающую и доступную сеть Docker.

Обходной путь

  • docker network ls
  • Выберите известную рабочую сеть
  • docker build --network=<known working network name>

По умолчанию Docker использует для построения сеть по умолчанию. Настройка сети вручную обеспечивает доступ к сети Интернет.

Я пробовал все выше, и у меня ничего не работало. Скрипт curiosity dockerd systemd не запускался при добавлении параметра --dns.

В моем случае проблема заключалась в том, что в ubuntu /etc/resolv.conf автоматически генерируется systemd-resolved и указывает на локальный ip 127.0.0.53, где работает DNS-кеш, безумно, но с этой информацией контейнеры, которые пытаются разрешить DNS с самим собой в его интерфейсе looppack. Изменение resolv.conf вручную на DNS нашей компании в локальной сети устранило проблему, а затем изменило systemd-resolved, чтобы сделать это навсегда.

Если вы можете выполнить ping/curl в реестре npm, но по-прежнему получаете ошибку с npm install, ошибка может быть связана с отсутствием пакета ca-certs. Добавьте следующую строку в Dockerfile передnpm install и перестроим образ.

FROM node:alpine

# Installing cert package will allow resolving the error to https://registry.npmjs.org/
RUN apk add --no-cache ca-certificates

RUN npm install
CMD ["npm", "start"]

Для меня проблема заключалась в том, что мой раздел подкачки имел проблемы после изменения размера корневого раздела и запрашивал у меня пароль для почти всех системных задач (таких как команды apt get, повторная загрузка / перезагрузка и т. Д.).

Пожалуйста, введите кодовую фразу для диска... (cryptswap1) ни на одном

Заметка

Попробуйте только это, если вы также видите ошибку выше и испытываете проблему, описанную в вопросе, когда вы пытаетесь выполнить npm install внутри док-контейнера:

Ошибка: getaddrinfo ENOTFOUND/EAI_AGAIN registry.npmjs.org registry.npmjs.org:443

Решение

  1. Откройте GParted и проверьте, где смонтирован ваш раздел подкачки, например /dev/sda5 (обозначается как "SWAP_PARTITION")
  2. редактировать /etc/crypttab и заменить UUID=**** чтобы получить следующий шаблон:

    cryptswap1 /dev/SWAP_PARTITION/ /dev/urandom swap,**,cipher=****

  3. Перезагрузитесь, если вам все еще задают пароль, продолжайте:

  4. Выполнить команду sudo dd if=/dev/zero of=/dev/SWAP_PARTITION/ bs=512 count=20480 и перезагрузите компьютер. Это исправило это для меня.

источник

Я следил за учебником. У меня этой ошибки не возникает, когда я копирую все свои файлы:

# Specify base image
FROM node:alpine

WORKDIR /usr/app

# Install dependencies
COPY ./ ./
RUN npm install

# Default command
CMD ["npm", "start"]

Это случается со мной, когда я копирую package.json сначала, а затем скопируйте другие файлы после npm install:

# Specify base image
FROM node:alpine

WORKDIR /usr/app

# Install dependencies
COPY ./package.json ./
RUN npm install

COPY ./ ./

# Default command
CMD ["npm", "start"]
Другие вопросы по тегам