Приложение Docker в статусе Exited (0)

Я пытаюсь запустить небольшое серверное приложение в контейнере Docker.

index.js

var server_port = 3111
, http     = require('http')
, mosca    = require('mosca')
, dispatch = require('dispatch')
, httpServ = http.createServer(
    dispatch({
        '/': function(req, res, next){
            console.log('in route');
        }
    })
);

httpServ.listen(server_port, function() {
    console.log("listening on", server_port);
});

пакет.json

{
  "dependencies": {
    "dispatch": "^1.0.0"
  },
  "description": "",
  "engines": {
    "node": ">= 0.10.4"
  },
  "main": "index.js",
  "name": "SimpleServer",
  "version": "0.0.1"
}

Докерфайл

FROM    centos:centos6

# Enable EPEL for Node.js
RUN     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN     yum install -y npm

# Install nodemon
RUN npm install -g nodemon

# Bundle app source
COPY . /src
# Install app dependencies
RUN cd /src; npm install

# Expose port
EXPOSE  3111

# Run app using nodemon
RUN echo "***" && pwd && echo "***"
CMD ["nodemon", "/src/index.js"]

В терминале Docker и в рабочем каталоге SimpleServer команда $ docker build -t test_simple . привела к Successfully built 43c8806574f4. Любая попытка запуска образа в контейнере, таком как $ docker run -p 3111 test_simple, постоянно приводит к завершению кода и остановке сервера.

$ docker run -p 3111 test_simple
19 Aug 07:22:56 - [nodemon] v1.4.1
19 Aug 07:22:56 - [nodemon] to restart at any time, enter `rs`
19 Aug 07:22:56 - [nodemon] watching: *.*
19 Aug 07:22:56 - [nodemon] starting `node /src/index.js`
Master: 16
19 Aug 07:22:57 - [nodemon] clean exit - waiting for changes before restart

$ docker run -d -P test_simple node /src/index.js
a0a56ec5c13161bc37b523be0e32edec0a43ca82e7db88ddb2a91688f745b24b

$ docker ps -l
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                     PORTS               NAMES
a0a56ec5c131        test_simple         "node /src/index.js"   6 seconds ago       Exited (0) 6 seconds ago                       jolly_bohr

Я не могу сказать, что происходит и почему сервер закрывается. Любая обратная связь приветствуется. Спасибо.


person aug2uag    schedule 19.08.2015    source источник


Ответы (1)


Вы можете использовать docker run --rm -it test_simple bash, чтобы получить оболочку в контейнер, затем попробовать запустить nodemon /src/index.js вручную и выяснить, что там может пойти не так, а также запустить node напрямую вместо nodemon при отладке этой проблемы.

Кроме того, лучше использовать официальный образ узла.

person Vincent De Smet    schedule 19.08.2015
comment
У меня странное поведение: $ docker exec -it test_simple bash Error response from daemon: no such id: test_simple. $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE test_simple latest f080110b21c8 45 seconds ago 557.2 MB. $ docker exec -it f080110b21c8 bash Error response from daemon: no such id: f080110b21c8. - person aug2uag; 19.08.2015
comment
что возвращает ваш docker images? вы создали образ с тегом test_simple не так ли? - person Vincent De Smet; 19.08.2015
comment
ах, комментарий исказил это - ваши изображения показывают test_simple:latest try docker run -it --rm test_simple:latest bash (также обратите внимание, что я отредактировал свой ответ, чтобы использовать run вместо exec) - изначально я ошибался. - person Vincent De Smet; 19.08.2015
comment
docker run --rm -it test_simple bash хорошо. Он показывает код, выходящий с [nodemon] clean exit - waiting for changes before restart. - person aug2uag; 19.08.2015
comment
попробуйте запустить узел напрямую - person Vincent De Smet; 19.08.2015
comment
Каталог выглядит хорошо. Это дает мне то, с чем можно работать. [root@6186a13be58b src]# node index.js Master: 48 [root@6186a13be58b src]# node > console.log('hello') hello undefined - person aug2uag; 19.08.2015
comment
Давайте продолжим обсуждение в чате. - person Vincent De Smet; 19.08.2015
comment
Хорошо, у меня есть дополнительная библиотека в моем SimpleServer, которой нет в package.json -- - person aug2uag; 19.08.2015
comment
Кажется, Докеру не нравится кластер. Мне пришлось избавиться от него, чтобы код заработал. Спасибо за вашу помощь, это решило это для меня на сегодня. - person aug2uag; 19.08.2015