Не может установить npm в контейнер докеров?

Я развертываю простое приложение node.js на докере-платформе цифрового океанского сервера.

//package.json

{
  "name": "docker-centos-hello",
  "private": true,
  "version": "0.0.1",
  "description": "Node.js Hello world app on CentOS using docker",
  "author": "Daniel Gasienica <[email protected]>",
  "dependencies": {
    "express": "3.2.4"
  }
}

//app.js

var express = require('express');
var PORT = 3000;
var app = express();
app.get('/', function (req, res) {
  res.send('Hello world\n');
});  
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

//файл докеров

FROM dockerfile/nodejs
# Set the working directory
WORKDIR   /src
EXPOSE  3000
CMD ["/bin/bash"]

Основным изображением докера является файл dockerfile/nodejs, который построил node.js, я создал изображение:

docker build -t test1 /home/sizhe/docker/test

и запустите изображение:

docker run -it -p 8080:3000 -v /home/sizhe/docker/test1:/src test

Запустив изображение, я могу успешно попасть в контейнер, все файлы приложения будут скопированы в контейнер. когда я попробовал команду для установки зависимости node.js:

npm install

Однако npm не может загрузить все пакеты с ошибкой:

Linux 3.13.0-40-generic
npm ERR! argv "node" "/usr/local/bin/npm" "install"
npm ERR! node v0.10.35
npm ERR! npm  v2.1.16
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR! syscall getaddrinfo

npm ERR! network getaddrinfo ENOTFOUND
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'

Ответ 1

Убедитесь, что dns установлен правильно. У меня были некоторые проблемы, которые были удалены после перезапуска службы docker. Если это не помогло вам, возможно, захотите использовать доклерский переключатель --dns 8.8.8.8.

Перезапуск службы докеров:

  • на архитектуре systemd - sudo systemctl restart docker
  • boot2docker - boot2docker restart
  • Докерная машина - docker-machine restart <machine_name>

Кроме того, я сделал что-то подобное (изображение nodejs), но я использовал другое базовое изображение, не стесняйтесь использовать все, что вам нужно, из своего репо.