Docker-it选项赢得';不能在Dockerfile中使用ENTRYPOINT或CMD

Docker-it选项赢得';不能在Dockerfile中使用ENTRYPOINT或CMD,docker,dockerfile,docker-image,docker-entrypoint,Docker,Dockerfile,Docker Image,Docker Entrypoint,我是Docker新手,当我使用-it选项运行Docker映像时,Docker容器完成运行,响应Docker文件中指示的“test”,并以零退出。预期的行为应该是docker打开容器的虚拟终端: docker运行-it测试 这是我的Docker文件: FROM centos CMD echo test 我尝试了CMD和ENTRYPOINT,以及shell表单和exec表单,行为是相同的。但是,如果在docker文件中用RUN替换CMD,-it选项可以正常工作 Docker要求主进程保持在前台运行

我是Docker新手,当我使用-it选项运行Docker映像时,Docker容器完成运行,响应Docker文件中指示的“test”,并以零退出。预期的行为应该是docker打开容器的虚拟终端:
docker运行-it测试
这是我的Docker文件:

FROM centos
CMD echo test

我尝试了CMD和ENTRYPOINT,以及shell表单和exec表单,行为是相同的。但是,如果在docker文件中用RUN替换CMD,-it选项可以正常工作

Docker要求主进程保持在前台运行。否则,它会认为应用程序已停止,并关闭容器

在您的情况下,
-i
表示即使未连接也保持STDIN打开&
-t
表示分配一个伪tty。当容器运行时,它们才有意义

但容器的运行并不取决于上述标志,而是取决于主进程。在这里,它是
echo test
,它执行然后完成,因此容器找到主进程finish,它退出

如果将
CMD
替换为
RUN
,则它将使用默认的
CMD
,即
/bin/bash
,请参阅centos的dockerfile,
/bin/bash
将不会自动退出,因此容器不会退出。

容器的可能副本没有“虚拟终端”。设计要点是,一个容器运行一个运行时间相当长的服务,如果该服务关闭,则退出(放弃其所有状态)。