在容器启动时启动服务
我想在我的容器启动(snmpd,sshd和centengine)上运行3个服务
由于容器中的运行级别未知,服务将无法启动。
我用这个Dockerfilebuild立了一个图像:
FROM centos:6.7 MAINTAINER nael <me@mail> # Update CentOS RUN yum -y update # Install wget RUN yum install -y wget # Get Centreon Repo RUN wget http://yum.centreon.com/standard/3.0/stable/ces-standard.repo -O /etc/yum.repos.d/ces-standard.repo # Install Packages (SSH, sudo, Centreon Poller & Engine, SNMP) RUN yum install -y --nogpgcheck openssh-clients openssh-server centreon-poller-centreon-engine sudo net-snmp net-snmp-utils # Install supervisord RUN rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm RUN yum --enablerepo=epel install -y supervisor RUN mv -f /etc/supervisord.conf /etc/supervisord.conf.org ADD supervisord.conf /etc/ # For sshd & centengine EXPOSE 22 5669 # Change user password RUN echo -e "password" | (passwd --stdin user) # Disable PAM (causing issues while ssh login) RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config # Start supervisord CMD ["/usr/bin/supervisord"]
这是supervisord.conf文件
[supervisord] nodaemon=true pidfile=/var/run/supervisord.pid logfile=/var/log/supervisor/supervisord.log [program:centengine] command=service centengine start [program:snmpd] command=service snmpd start [program:sshd] command=service sshd start
但是用这个Dockerfile和supervisord.conf,当我启动我的容器时,这些服务没有运行。
可能是什么问题呢 ?
不再使用supervisord了。
我只是在Dockerfile中包含一个包含所有services ... start
的脚本services ... start
命令。 当我用docker run ...
创build我的容器docker run ...
我只是指定我想用我的脚本启动它。
这工作得很好。
感谢@warmoverflow试图解决这个问题。
您可能会发现我的dockerfy
实用程序有用的启动服务,在主命令启动之前预运行初始化命令。 见https://github.com/markriggins/dockerfy
例如:
RUN wget https://github.com/markriggins/dockerfy/releases/download/0.2.4/dockerfy-linux-amd64-0.2.4.tar.gz; \ tar -C /usr/local/bin -xvzf dockerfy-linux-amd64-*tar.gz; \ rm dockerfy-linux-amd64-*tar.gz; ENTRYPOINT dockerfy COMMAND --start bash -c "while false; do echo 'Ima Service'; sleep 1; done" -- \ --reap -- \ nginx
会运行一个bash脚本作为服务,在主命令nginx
运行的同时,每秒都会回显“Ima Service”。 如果nginx退出,那么“Ima Service”脚本将自动停止。
作为一个额外的好处,任何由nginx遗留的僵尸进程都会被自动清理。
您还可以将日志文件(如/var/log/nginx/error.log)logging到stderr,在启动之前编辑nginx的configuration等等