在容器启动时启动服务

时间:2016-05-12 15:10:56

标签: service docker centos startup dockerfile

我试图在我的容器启动时运行3项服务(snmpd,sshd和centengine)

由于容器中的运行级别未知,服务不会启动。

我用这个Dockerfile构建了一个图像:

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,当我启动容器时,这些服务还没有运行。

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

不再使用supervisord。

我只是在Dockerfile中包含一个包含所有services ... start命令的脚本。当我用docker run ...创建容器时,我只是指定我想用我的脚本启动它。

&安培;这很有效。

感谢@warmoverflow尝试解决此问题。

答案 1 :(得分:0)

您可以在主命令启动之前找到我的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脚本作为服务运行,每秒回显“Ima Service”,同时运行主命令nginx。如果nginx退出,则“Ima Service”脚本将自动停止。

作为一个额外的好处,nginx遗留下来的任何僵尸进程都会被自动清理。

您还可以将文件(例如/var/log/nginx/error.log)发送到stderr,在启动之前编辑nginx的配置等等