Docker-如何在图像创建期间测试服务是否正在运行

Docker-如何在图像创建期间测试服务是否正在运行,docker,dockerfile,Docker,Dockerfile,我对docker很不了解,发现自己面临以下问题: 我试图创建一个dockerfile来生成一个带有我公司软件的图像。在安装该软件期间,安装过程将使用以下命令检查ssh是否正在运行: if [ $(pgrep sshd | wc -l) -eq 0 ]; then 我可能需要明确指出,我是在同一个过程中安装和启动openssh的 您是否可以在创建映像期间检查服务是否正在运行 我不能忽略这个步骤,因为它是作为自解压机制的一部分执行的 任何正确方向的线索都将不胜感激。映像无法运行服务。您只需创建容器

我对docker很不了解,发现自己面临以下问题:

我试图创建一个dockerfile来生成一个带有我公司软件的图像。在安装该软件期间,安装过程将使用以下命令检查ssh是否正在运行:

if [ $(pgrep sshd | wc -l) -eq 0 ]; then
我可能需要明确指出,我是在同一个过程中安装和启动openssh的

您是否可以在创建映像期间检查服务是否正在运行

我不能忽略这个步骤,因为它是作为自解压机制的一部分执行的


任何正确方向的线索都将不胜感激。

映像无法运行服务。您只需创建容器运行所需的所有必要内容,如在Dockerfile中安装数据库、服务器或复制一些配置文件等。docker文件中的最后一步是,当您发出
docker run
命令时,您可以给出如何操作的说明。可以使用Dockerfile中的CMD或ENTRYPOINT指定脚本或命令


要回答您的问题,在映像创建过程中,您无法检查服务是否正在运行。当容器启动时,docker将执行可以在CMD或ENTRYPOINT中指定的脚本或命令。您可以使用该脚本检查您的服务是否正在运行,并在运行之后采取必要的操作。

可以在创建映像期间运行服务。一旦RUN命令完成,所有进程都将被终止。服务不会在运行命令之间保持运行。但是,每个RUN命令都可以启动服务并使用它们

如果映像创建命令需要服务,请启动该服务,然后运行依赖于该服务的命令,全部在一个运行命令中运行

RUN sudo service ssh start \
    && ssh localhost echo ok \
    && ./install
  • 第一行启动ssh服务器并在服务器运行时成功
  • 第二行测试ssh服务器是否已启动
  • 第三行是占位符:“install”命令可以使用localhost ssh服务器

如果服务无法启动,docker build命令将失败。

我不清楚这个问题。当你说“映像创建”是什么意思?你想在容器内还是在运行容器的主机上运行open ssh?@Griffin对我来说,映像创建过程是使用docker文件生成映像(docker build[OPTIONS]PATH)。@yamenk否我想在容器中运行open ssh。但是测试ssh服务是否启动的过程,在docker构建过程中进行。最终目标是什么?如果ssh当时正在运行?我很害怕。因此,对于我来说,安装软件的唯一方法是:-首先在dockerfile中安装所有必需的库和软件-两个将我们的自动安装程序设置为入口点-三、在完成之前的所有步骤后,是否保存容器?@Driky每次从映像中创建容器时,是否都需要运行自动安装程序?是的,因为我不能将其作为docker构建过程的一部分运行,所以每次创建容器时,我都必须运行它,这并不理想。@Driky那么您就不需要第三步了。autoinstaller脚本应设置为ENTRYPOINT,然后是另一个永远运行的命令(以便容器不会停止)。例如,请参见,在最末端有一个等待,它将保持容器运行,直到其停止。创建新容器和启动/停止现有容器之间存在差异。我想您的意思是在每次创建新容器时运行autoinstaller脚本,而不是在启动/停止现有容器时运行。@Driky太好了,所以在这个项目中遵循Dockerfile和start.sh是您继续的方式