Docker-контейнер: сервис немедленно выходит - PullRequest
0 голосов
/ 14 марта 2019

Я запускаю контейнер в фоновом режиме

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

облако-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 и запустил облачный ресурс, процесс запустился.

run -d -it -e SERVER_ADDR=127.0.0.1 --name resource1 agent:1.0 --entrypoint /bin/bash 

1 Ответ

2 голосов
/ 14 марта 2019

Докер-контейнер будет остановлен, как только его корневой процесс завершится.

Вы определяете корневой процесс с помощью

CMD /cloud/cloud-resource

Внутри док-контейнера он будет выполнен и каккак только выполнение завершится, контейнер будет остановлен.Поскольку последняя команда 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 дополнительно сообщает докеру, чтобы STDIN оставался открытым, даже если он не подключен.Таким образом, ваш bash активен - даже если он отключен.

Попробуйте изменить скрипт, чтобы не использовать nohup и &

...