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

时间:2017-10-10 14:29:55

标签: docker dockerfile

我对码头工作者非常认真,发现自己面临以下问题:

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

if [ $(pgrep sshd | wc -l) -eq 0 ]; then

我可能需要确定我在同一过程中安装并启动open-ssh。

在图像创建过程中,您是否可以检查服务是否正在运行?

我不能忽视该步骤是否作为自解压机制的一部分执行。

任何有关正确方向的线索都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

如果一个镜像创建命令需要一个服务,启动该服务,然后运行依赖该服务的命令,所有这些都在一个 RUN 命令中。

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

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