我正在将服务脚本传递给ENTRYPOINT。服务已启动但已退出。 我必须使用ENTRYPOINT或CMD的服务脚本为每个容器启动一个进程。这样,我可以使用服务脚本在容器内重新加载配置。我也尝试使用CMD语句,但是它启动了服务,但立即存在容器。

ENTRYPOINT ["/etc/init.d/elasticsearch", "start"]

/etc/init.d/elasticsearch脚本具有以下代码,以作为守护程序启动服务。

cd $ES_HOME
echo -n $"Starting $prog: "
daemon --user elasticsearch --pidfile $pidfile $exec -p $pidfile -d
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval

使用启动脚本无法启动服务并保持容器运行吗?

用于创建和运行容器的命令。

docker build -f Dockerfile -t="elk/elasticsearch" .
docker run -d elk/elasticsearch
docker run -it elk/elasticsearch bash
分析解答

就服务管理器而言,sysv初始化脚本的类型为"forking"。因此它将与启动脚本分离。然后,容器需要在pid 1上执行一些初始化进程,该进程控制后台进程(es)。

如果您不想从初始化脚本中提取相关命令,则仍可以使用docker-systemctl-replacement为您完成这两项操作。如果以CMD运行,则它将启动已启用的服务脚本,就像从普通计算机上使用时一样。