重启 docker 基础镜像的 CMD 服务

时间:2021-01-06 17:16:56

标签: docker

背景

我有一张来自这里的图片: https://hub.docker.com/r/boostport/hbase-phoenix-all-in-one/tags?page=1&ordering=last_updated&name=1.2

这个 docker 镜像的 Dockerfile 以运行 bash 脚本结束,该脚本启动了很多服务。我需要更改一些服务的配置。所以,我有一个部分看起来像这样的 Dockerfile:

FROM boostport/hbase-phoenix-all-in-one:1.2-4.11
COPY ./my_configs.xml /opt/hbase/conf/hbase-site.xml
CMD ["./restart-hbase-phoenix.sh"]

重启脚本只是从父映像重启在 CMD 脚本中启动的服务。

我遇到的问题是我的重启脚本似乎在基本映像的服务运行之前运行。我曾假设图像会先运行,然后我的 COPY 和 CMD 会运行。这似乎没有发生。

问题

如何仅在使用其所有 Dockerfile 命令完成映像后才运行 CMD?

注意事项

错误:

stopping hbasecat: can't open '/tmp/hbase--master.pid': No such file or directory
no Query Server to stop because PID file not found, /tmp/phoenix/root-queryserver.pid
nothing to stop because no pid file /tmp/tephra-service-.pid

1 个答案:

答案 0 :(得分:2)

如果您的 Dockerfile 中有 CMD 命令,它将替换其任何基础映像的 CMD 命令。 CMD 指定了容器中运行的进程,并且只能有一个。最近宣布的一个获胜。

如果您需要做的只是启动进程,您可以通过在 Dockerfile 中简单地省略 CMD 来使用父映像的 CMD。如果您需要进行更改,请从基础映像复制 CMD 并进行必要的更改。