docker ubuntu 容器 exec 不会替换命令

docker ubuntu 容器 exec 不会替换命令

我正在尝试为 openshift 构建容器。他们的要求之一是主进程是 pid 1。为了做到这一点,您的起始 shell 脚本应该使用 exec 来替换 shell 脚本。对于我们的应用程序,我们正在使用 Tomcat,所以我没有机会正确替换 catalina.sh,只能使用它,因为它确实使用了 exec,但命令没有被替换。所以我简化了容器,但问题仍然存在:Dockerfile:

FROM ubuntu:18.04

ADD test.sh /root/test.sh
RUN chmod a+x /root/test.sh

CMD /root/test.sh

测试文件

#!/bin/bash
exec /bin/sleep 3600

我使用构建容器docker build -t test . 如果我现在使用运行容器docker run --name test-ub test然后执行docker top test-ub -ef它显示:

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                109019              108989              0                   16:50               ?                   00:00:00            /bin/sh -c /root/test.sh
root                109057              109019              0                   16:50               ?                   00:00:00            /bin/sleep 3600

两个进程不应该这样!如果我用 替换它,FROM ubuntu:18.04FROM centos:centos7会按预期工作,只有一个进程:

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                105946              105916              0                   16:19               ?                   00:00:00            /bin/sleep 3600

所以我认为问题出在 Ubuntu 的某个地方,但我不知道在哪里。任何帮助都非常感谢。

答案1

我发现同样的问题,在 stackoverflow 上有很好的答案
我不想重复答案,只给出一个简短的摘要:

不同之处在于Ubuntu 和CentOS 中的默认设置。sh如果 你使用以下命令运行命令,它将按预期工作:dashbash
bash

CMD ["/bin/bash", "/root/test.sh"]

相关内容