我尝试在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
但是找不到任何主管工作
答案 0 :(得分:2)
使用docker run ... [command]运行Docker容器时,将覆盖dockerfile(supervisord)see here中指定的默认命令。尝试在没有命令选项的情况下启动它,在您的情况下为“/ bin / bash”。这意味着在你的情况下你盯着bash而不是supervisord,这意味着没有启动来自supervisord的进程。
如果您想检查一切是否有效,可以使用docker logs或docker exec。
答案 1 :(得分:2)
您是否考虑过在单独的容器中运行这两项服务?