使用下面的dockerfile构建并运行映像。
Dockerfile1
FROM ubuntu:trusty ENTRYPOINT ping localhost
现在运行以下命令以查看容器中正在运行的进程。
docker exec -it <container> ps -ef
PID 1进程正在运行/ bin / sh -c ping localhost
UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:35 ? 00:00:00 /bin/sh -c ping localhost root 8 1 0 11:35 ? 00:00:00 ping localhost root 9 0 0 11:35 pts/0 00:00:00 ps -ef
现在, 仅 将基本图像更改为centos:latest。
修改后的Dockerfile
FROM centos:latest ENTRYPOINT ping localhost
使用修改后的dockerfile构建并运行映像。再次运行’docker exec -it ps -ef’命令。
UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:32 ? 00:00:00 ping localhost root 8 0 0 11:33 pts/0 00:00:00 ps -ef
但是现在PID 1进程正在运行’ping localhost’
即使将ENTRYPOINT替换为CMD,也会发生这种情况。
我以为使用shell形式/ bin / sh时,PID为1的过程(都使用ENTRYPOINT / CMN时)。
为什么我 仅 通过更改基本图像 就能 看到不同的行为?
这是的行为bash。Docker仍在运行带有外壳的命令,您可以通过检查来识别该外壳:
bash
$ docker inspect test-centos-entrypoint --format '{{.Config.Entrypoint}}' [/bin/sh -c ping localhost]
您可以看到/ bin / sh的版本(请注意GNU bash部分):
$ docker exec -it quicktest /bin/sh --version GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu) Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
/ bin / sh的ubuntu版本(可能是破折号)甚至不支持该--version标志,并且未链接到bash。但是,如果您将ubuntu映像更改为使用bash而不是/ bin / sh,则会看到与centos匹配的行为:
--version
$ cat df.ubuntu-entrypoint FROM ubuntu:trusty ENTRYPOINT [ "/bin/bash", "-c", "ping localhost" ] $ DOCKER_BUILDKIT=0 docker build -t test-ubuntu-entrypoint -f df.ubuntu-entrypoint . Sending build context to Docker daemon 23.04kB Step 1/2 : FROM ubuntu:trusty ---> 67759a80360c Step 2/2 : ENTRYPOINT [ "/bin/bash", "-c", "ping localhost" ] ---> Running in 5c4161cafd6b Removing intermediate container 5c4161cafd6b ---> c871fe2e2063 Successfully built c871fe2e2063 Successfully tagged test-ubuntu-entrypoint:latest $ docker run -d --name quicktest2 --rm test-ubuntu-entrypoint 362bdc75e4a960854ff17cf5cae62a3247c39079dc1290e8a85b88114b6af694 $ docker exec -it quicktest2 ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:05 ? 00:00:00 ping localhost root 8 0 0 13:05 pts/0 00:00:00 ps -ef