使用supervisor在docker中运行节点和nginx

时间:2014-12-02 12:22:15

标签: node.js nginx docker supervisor

我尝试在docker容器中设置node和nginx,使用supervisor启动并监控这两个进程。我有一个启动nginx和节点的supervisor conf文件。

问题在于,当我尝试使用supervisorctl访问服务时,找不到它们。所以我认为我一定做错了。

supervisor.conf

[supervisord]
nodaemon=true

[program:nodeServer]
directory=/app/backend
command=/nodejs/bin/node app.js 
autostart=true
autorestart=unexpected
user=www-app
startsecs=10
stdout_logfile=/var/log/repositive.io/supervisor.log
redirect_stderr=true

[program:nginx]
command=/usr/sbin/nginx
stdout_events_enabled=true
stderr_events_enabled=true

dockerfile

FROM google/debian:wheezy

# update and install nginx and supervisor
RUN apt-get update -y && \
    apt-get install --no-install-recommends -y -q \
    curl python build-essential git ca-certificates nginx-extras supervisor

# install node
RUN mkdir /nodejs && \
    curl http://nodejs.org/dist/v0.10.32/node-v0.10.32-linux-x64.tar.gz | \
    tar xvzf - -C /nodejs --strip-components=1

ENV PATH $PATH:/nodejs/bin

# setup db
RUN apt-get install -y postgresql

USER postgres
RUN /etc/init.d/postgresql start && \
    createuser repositive -S -D -R && \
    createdb --owner=repositive --port=5432 repositive && \
    createdb --owner=repositive --port=5432 repositive-testing

# init app
USER root
RUN mkdir -p /var/www/repositive.io
RUN mkdir -p /var/log/repositive.io
RUN chown -R www-data:www-data /var/www/repositive.io

WORKDIR /app
ONBUILD ADD nginx.conf /etc/nginx/sites-available/default
ONBUILD ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
ONBUILD ADD ../ /app
ONBUILD RUN npm install

ENV NODE_ENV production

EXPOSE 80
CMD ["/usr/bin/supervisord"]

现在我尝试通过构建映像来访问其中一个服务,而不是以交互模式运行它:

sudo docker run -t -i timrich/api.repositive.io:V0.0.1 /bin/bash
root@b16b20f8f1b4:/app# /usr/bin/supervisord
root@b16b20f8f1b4:/app# supervisorctl status nginx
No such process nginx

但是找不到任何主管工作

2 个答案:

答案 0 :(得分:2)

使用docker run ... [command]运行Docker容器时,将覆盖dockerfile(supervisord)see here中指定的默认命令。尝试在没有命令选项的情况下启动它,在您的情况下为“/ bin / bash”。这意味着在你的情况下你盯着bash而不是supervisord,这意味着没有启动来自supervisord的进程。

如果您想检查一切是否有效,可以使用docker logsdocker exec

答案 1 :(得分:2)

您是否考虑过在单独的容器中运行这两项服务?

相关问题