在容器启动时启动服务
Starting services at container startup
我正在尝试 运行 我的容器启动时的 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,当我启动我的容器时,这些服务不是 运行ning。
可能是什么问题?
不再使用 supervisord。
我只是在 Dockerfile 中包含一个包含所有 services ... start
命令的脚本。当我使用 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 脚本作为服务,每秒回显 "Ima Service",而主要命令 nginx
运行s。如果 nginx 退出,那么 "Ima Service" 脚本将自动停止。
作为一个额外的好处,nginx 遗留下来的任何僵尸进程都将被自动清理。
您还可以跟踪日志文件,例如 /var/log/nginx/error.log 到 stderr,在启动前编辑 nginx 的配置等等
我正在尝试 运行 我的容器启动时的 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,当我启动我的容器时,这些服务不是 运行ning。
可能是什么问题?
不再使用 supervisord。
我只是在 Dockerfile 中包含一个包含所有 services ... start
命令的脚本。当我使用 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 脚本作为服务,每秒回显 "Ima Service",而主要命令 nginx
运行s。如果 nginx 退出,那么 "Ima Service" 脚本将自动停止。
作为一个额外的好处,nginx 遗留下来的任何僵尸进程都将被自动清理。
您还可以跟踪日志文件,例如 /var/log/nginx/error.log 到 stderr,在启动前编辑 nginx 的配置等等