Node.js Koa应用程序和CouchDB在单个容器中

我有一个koa.js应用程序,我想在泊坞窗容器中运行。 这个应用程序需要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 -gn 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 

有人知道我错过了什么或者我做错了什么?

在启动这个图像时运行的唯一命令是CMD行中的命令。 之前的每一行创build一个只读,非运行的图像。 因此,线路RUN service couchdb start将立即启动服务,直到它被标记为成功,然后docker将停止该图像,保存它,并移动到下一行。 服务的“运行”状态不会持续。

这是一个常见的误解,当我开始的时候就陷入了一种误解。

这三个选项,最快最快但最耐用,最后是最多的工作,但最合适:

  1. service couchdb start && npm start作为您的CMD行。
  2. 创build一个startup.sh脚本,完成所有需要在那里执行的“运行”,并将其作为您的CMD行调用
  3. 使用旨在为你做这个东西的服务,经常推荐supervisord 。

这是一个常见问题,所以如果你有通过谷歌search结果search“在docker中启动服务”,你会看到更多关于这个主题的信息。