为何docker create+start未显示CMD输出?Docker运行疑问
Docker 执行
docker create+docker start后无CMD输出的原因分析 问题背景
给定Dockerfile内容:
FROM ubuntu RUN apt update && apt install neofetch -y CMD ["echo", "Hello From Docker to Ubuntu"]
执行构建命令:
docker build -t my-ubuntu:001 .
构建过程正常。
执行以下命令时,终端能正常显示Hello From Docker to Ubuntu:
docker run --name my-ubuntu-001-001 -it my-ubuntu:001
但执行以下两步操作后,终端看不到上述消息:
docker create --name my-ubuntu-001-002 my-ubuntu:001 docker start my-ubuntu-001-002
疑问:这是预期行为还是遗漏了配置?为何会出现此情况?
解答:这是预期行为
原因如下:
docker run -it中的-i(保持标准输入打开)和-t(分配伪终端)参数,会将容器的标准输出/错误直接绑定到当前终端,所以echo的内容能实时显示在tty中。docker create默认不会分配伪终端,也不会建立容器与当前终端的关联;docker start默认仅启动容器进程,不会将终端附加到容器的输出流,因此echo的内容会写入容器的内部日志,而不是输出到当前tty。- 如果想在启动时看到输出,可以使用
docker start -a(-a参数表示附加到容器的标准输出和错误流):docker start -a my-ubuntu-001-002 - 也可以在创建容器时就指定
-it参数,后续启动时用docker start -a也能看到输出:docker create --name my-ubuntu-001-003 -it my-ubuntu:001 docker start -a my-ubuntu-001-003 - 另外,无论哪种方式,都可以用
docker logs命令查看容器的输出日志:docker logs my-ubuntu-001-002
内容的提问来源于stack exchange,提问作者Manuel Jordan
相关产品推荐
相关产品推荐

