ненадежный npm устанавливается в докер-контейнер - PullRequest
0 голосов
/ 26 июня 2018

У меня работает npm в пределах Dockerfile.

FROM node:9.11-alpine
COPY ./ /usr/src/app/
WORKDIR /usr/src/app/
RUN npm install && npm run build
ENTRYPOINT [ "npm", "run", "watch"]

Когда я делаю docker build ., у меня низкий шанс успешного завершения сборки.В течение нескольких минут, если я периодически запускаю одну и ту же команду без каких-либо изменений в моем Dockerfile или чем-либо еще, сборка будет успешной.В большинстве случаев, хотя я получаю

...
npm WARN tar ENOENT: no such file or directory, open '/usr/src/app/node_modules/.staging/bluebird-5b126a50/js/browser/bluebird.js'
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR! network request to https://registry.npmjs.org/json-bigint/-/json-bigint-0.2.3.tgz failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
npm ERR! network This is a problem 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! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-06-26T08_18_44_426Z-debug.log

, поскольку сборка не удалась, я не могу проверить /root/.npm/_logs/2018-06-26T08_18_44_426Z-debug.log (по крайней мере, насколько мне известно).Ошибка говорит, что это проблема с подключением, но есть ли в онлайн-хранилище npm какое-то регулирование?Или Docker действует как прокси?

Есть ли способ использования npm с докером, который позволяет избежать этой ошибки, о которой я не знаю?

EDIT

Подробные журналы запуска npm install вручную внутри контейнера с использованием оболочки

1420 verbose type system
1421 verbose stack FetchError: request to https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
1421 verbose stack     at ClientRequest.req.on.err (/usr/local/lib/node_modules/npm/node_modules/pacote/node_modules/make-fetch-happen/node_modules/node-fetch-npm/src/index.js:68:14)
1421 verbose stack     at ClientRequest.emit (events.js:180:13)
1421 verbose stack     at TLSSocket.socketErrorListener (_http_client.js:395:9)
1421 verbose stack     at TLSSocket.emit (events.js:180:13)
1421 verbose stack     at emitErrorNT (internal/streams/destroy.js:64:8)
1421 verbose stack     at process._tickCallback (internal/process/next_tick.js:178:19)
1422 verbose cwd /usr/src/app
1423 verbose Linux 4.14.48-2-MANJARO
1424 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
1425 verbose node v9.11.2
1426 verbose npm  v5.6.0
1427 error code ENOTFOUND
1428 error errno ENOTFOUND
1429 error network request to https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
1430 error network This is a problem related to network connectivity.
1430 error network In most cases you are behind a proxy or have bad network settings.
1430 error network
1430 error network If you are behind a proxy, please make sure that the
1430 error network 'proxy' config is set properly.  See: 'npm help config'
1431 verbose exit [ 1, true ]

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Таким образом, проблема с подключением действительно была локальной проблемой подключения. Я использовал другой Wi-Fi из другого места, и я подтвердил, что это настройки Wi-Fi в квартире, в которой я нахожусь. Поскольку я впервые использовал npm и docker вместе, я не мог исключить другие проблемы ...

Что касается ведения журналов, я обнаружил две замечательные опции докера для поиска журналов, даже когда контейнер не удается построить;

docker logs <containerid>

и

docker cp <containerid>:/path/to/log.file ./local/path/of/log.file

, которые работают с контейнерами, которые не работают. Это позволило мне более эффективно устранять неполадки без изменения Dockerfile.

0 голосов
/ 26 июня 2018

Почему бы не отделить docker build без точки входа и docker run с точкой входа?

Попытка:

Dockerfile

FROM node:9.11-alpine
COPY ./ /usr/src/app/
WORKDIR /usr/src/app/
RUN npm install && npm run build

После этого создайте изображение:

docker build -t your_image_name .

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

docker run -d --net=host your_image_name npm run watch

Если это не работает, вы можете проверить свой журнал двумя способами:

  1. Запуск контейнера с общим объемом: docker run -d -v /tmp/any_dir:/root/.npm/_logs/ ...: доступен с хоста.
  2. Запустить контейнер с помощью sh, войти в контейнер, выполнить команду вручную и проверить файл журнала: docker run -ti your_image_name sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...