Ошибки установки npm говорят: «Ошибка: getaddrinfo ENOTFOUND npm.lab.myorg.com»

Прежде чем вы пометите мой вопрос как дубликат... Я перепробовал все остальное, что смог найти в Google.

ИСТОРИЯ: Мы используем частный репозиторий npm Enterprise. Docker + Vagrant используются для сборки Env Setup. Сценарии установки содержат npm installs ссылающихся пакетов из частного репозитория. И установка npm завершается с ошибкой ниже

npm http request GET https://npm.lab.myorg.com/passport-http
npm info attempt registry request try #3 at 4:27:26 PM
npm http request GET https://npm.lab.myorg.com/verror
npm ERR! Linux 3.13.0-24-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v5.6.0
npm ERR! npm  v3.6.0
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR! syscall getaddrinfo

npm ERR! network getaddrinfo ENOTFOUND npm.lab.myorg.com npm.lab.myorg.com:443
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

npm ERR! Please include the following file with any support request:
npm ERR!     /usr/src/app/npm-debug.log

Я пробовал все, что предлагалось в Интернете

  1. Пробовал перезапускать днс.
  2. Выяснил в ИТ отделе, есть ли прокси и нет ли их. Поэтому убедитесь, что npm config proxy пусто
  3. Я проверил подключение к npm.lab.myorg.com:443, все в порядке.

    vagrant@dockerhost:~/git/ curl -Is https://npm.lab.myorg.com/ HTTP/1.1 200 OK Server: nginx/1.4.6 (Ubuntu) Date: Sun, 16 Oct 2016 16:26:40 GMT Content-Type: text/html; charset=utf-8 Content-Length: 36342 Connection: keep-alive X-Powered-By: Sinopia/1.4.0 X-Frame-Options: deny ETag: "180fec4dfa875dd07ebf5f43887ca234" Vary: Accept-Encoding X-Status-Cat: http://flic.kr/p/aVuVsF

ОБНОВЛЕНИЕ 1; Curl из контейнера Docker не работает при вставке шага RUN curl -I -vvvv https://npm.lab.myorg.com/ в Dockerfile

это результат

Step 5 : RUN curl -I -vvvv https://npm.lab.myorg.com/
 ---> Running in a677c4429ea5
* Hostname was NOT found in DNS cache
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Could not resolve host: npm.lab.myorg.com
* Closing connection 0
curl: (6) Could not resolve host: npm.lab.myorg.com
ERROR: Service '******' failed to build: The command '/bin/sh -c curl -I -vvvv https://npm.lab.myorg.com/' returned a non-zero code: 6

Тот же завиток при запуске из терминала работает все хорошо.

ОБНОВЛЕНИЕ 2: содержимое файла докера ниже

FROM tools.lab.myorg.com:5000/myorg/node:0.10.40.3
LABEL description="blahhblah API" \
    version=1.0
ENV WORKDIR=/usr/src/app
WORKDIR $WORKDIR
RUN curl -I -vvvv https://www.google.co.in/
RUN mkdir -p $WORKDIR/script \
    && npm install -g privatePackage1
    && npm install -g privatePackage2
# COPY ./package.json $WORKDIR
# COPY ./script/ $WORKDIR/script/
# RUN ./script/bootstrap
COPY . $WORKDIR
CMD ["script/server"]

person AdityaReddy    schedule 16.10.2016    source источник


Ответы (1)


Попробуйте запустить curl -I -vvvv https://npm.lab.myorg.com/ непосредственно перед вашей командой npm install в ваших сценариях установки (которые, я полагаю, запускаются в контейнере Docker из команды Dockerfile RUN?).

Это должно распечатать некоторую отладочную информацию, чтобы показать вам, может ли контейнер Docker вообще получить доступ к вашему частному репозиторию.

person ocean    schedule 17.10.2016
comment
Я думаю, вы были правы в определении проблемы. Curl из внутреннего контейнера докеров действительно терпит неудачу. Тогда как curl снаружи терминала работает успешно. Я обновил ответ с подробным выводом curl. Есть ли у вас какое-либо решение, почему это происходит только изнутри контейнера докеров - person AdityaReddy; 17.10.2016
comment
Сужение всегда помогает :) Может ли контейнер curl использовать любые другие URL-адреса? - person ocean; 17.10.2016
comment
Кроме того, какой контейнер Docker вы используете? Пользовательский или из Docker Hub? Можете ли вы опубликовать содержимое своего Dockerfile (или его часть)? - person ocean; 17.10.2016
comment
да @ocean .. Я могу curl -I -vvvv https://www.google.co.in/ Что касается контейнера докеров, мы создаем собственный, используя DockerFile. Я обновил вопрос, добавив некоторое содержание - person AdityaReddy; 17.10.2016
comment
Взгляните на главный ответ на этот вопрос stackoverflow.com/questions/24151129/ Если ваш контейнер Docker основан на Ubuntu (и, возможно, других), он пытается использовать Google DNS, что может быть не так. доступный из того места, где вы находитесь. Может дело в этом? - person ocean; 17.10.2016