我在后台运行一个容器
docker run -d -e SERVER_ADDR=127.0.0.1 --name resource agent:1.0
但它立即退出。
DOCKERFILE
FROM centos:latest
MAINTAINER Simon <khlyum@innerbus.com>
RUN yum -y update; yum clean all
RUN yum -y install systemd; yum clean all;
RUN mkdir -p /cloud/config
RUN mkdir -p /cloud/log
WORKDIR /cloud
COPY sm_agent_resource sm_agent_resource
COPY config/agent.conf config/agent.conf
COPY config/log.xml config/log.xml
COPY cloud-resource cloud-resource
COPY certificate.pem certificate.pem
COPY client.crt client.crt
COPY client.key client.key
CMD /cloud/cloud-resource
云资源
#!/bin/bash
# chkconfig: 234 90 90
NAME=agent_resource
AGENT_HOME=/cloud
echo "Agent Config Setting"
sed -i '3i\ "agent_server_ip":"'${SERVER_ADDR}'",' config/agent.conf
echo "Start Cloud Agent_Resource"
nohup /cloud/sm_agent_resource 1>/dev/null 2>&1 &
#nohup /cloud/sm_agent_resource >>log/agent.log 2>&1 (<==I try it also.)
当我通过/ bin / bash连接到docker并运行cloud-resource时,进程正在运行。
run -d -it -e SERVER_ADDR=127.0.0.1 --name resource1 agent:1.0 --entrypoint /bin/bash
答案 0 :(得分:2)
Docker容器的根进程完成后将立即停止。
您正在使用
定义根进程CMD /cloud/cloud-resource
在docker容器内部,它将被执行,一旦执行完成,容器将被停止。由于cloud-resource
的最后一个命令是一个nohup
,最后是一个&
,因此您要将命令移至后台。然后,该脚本结束,容器的根进程也结束。
事实
docker run -d -it -e SERVER_ADDR=127.0.0.1 --name resource1 agent:1.0 --entrypoint /bin/bash
继续运行是因为您正在用entrypoint /bin/bash
覆盖根进程。 -i
告诉docker即使未连接STDIN也保持打开状态。因此,您的bash处于活动状态-即使已分离。
尝试修改脚本以不使用nohup
和&