2014-11-19 1 views
2

У меня есть приложение koa.js, которое я хочу запустить в контейнере докера. Это приложение loa требует запуска couchdb, который я хочу отправить в том же контейнере. Я знаю, что это не лучшая практика, но это действительно лучший способ для моих пользователей начать работу.Node.js Koa app и CouchDB в одном контейнере

Dockerfile:

# DOCKER-VERSION 1.2.0 
FROM centos:centos6 

# Enable EPEL for CouchDB and Node.js 
RUN yum -y update; yum clean all 
RUN yum -y install epel-release; yum clean all 
RUN yum -y install tar 

# Install Node.js and CouchDB 
RUN yum -y install couchdb; yum clean all 
RUN service couchdb start 
RUN yum install -y nodejs 
RUN yum install -y npm 

# Bundle app source 

ADD . . 

# Install app dependencies 

RUN npm install 
RUN npm install -g n 
RUN n 0.11.12 

# Expose port and run 
EXPOSE 8080 
CMD ["npm", "start"] 

, который прекрасно работает, приложение получает запущен, но он не может подключиться к CouchDB. бросая в ответ

RUN service couchdb start 

с ОК, так что это, кажется, работает, но

curl -X GET 127.0.0.1:5984 

реакция с

curl: (7) couldn't connect to host 

же для koa.js приложения:

error: error stack=Error: connect ECONNREFUSED 
at exports._errnoException (util.js:745:11) 
at Object.afterConnect [as oncomplete] (net.js:995:19), code=ECONNREFUSED, errno=ECONNREFUSED, syscall=connect 

Кто-то знает, чего я не хватает или что я делаю неправильно?

ответ

2

Единственная команда, которая запускается при запуске этого изображения, - это то, что находится в линии CMD. Каждая строка до этого создает только неиспользуемое изображение только для чтения. Таким образом, линия RUN service couchdb start запустит сервис на мгновение, пока он не будет отмечен как успешный, затем докер остановит это изображение, сохранит его и перейдет к следующей строке. «Бегущее» состояние службы не сохраняется.

Это распространенное заблуждение, и я упал, когда начал.

три варианта, верхний является еще быстрый наиболее Hacky, и последний из которых большая часть работы, но самое правильное:

  1. Поместите service couchdb start && npm start в качестве линии CMD.
  2. Создать Startup.sh сценарий, сделать все «работает», что вам нужно сделать там, и называют это в качестве CMD линии
  3. Используйте сервис разработан, чтобы сделать этот материал для вас, supervisord часто рекомендуется.

Это распространенная проблема, поэтому, если у вас есть прочитанные результаты поиска в Google для поиска «старт службы в докере», вы увидите больше информации по этому вопросу.

+0

спасибо. теперь отлично работает. мыслительные службы будут запущены по умолчанию. d'о. – cschaeffler

 Смежные вопросы

  • Нет связанных вопросов^_^