考虑以下Dockerfile
很简单
FROM ubuntu
RUN apt update && apt install neofetch -y
CMD ["echo", "Hello From Docker to Ubuntu"]
根据一些研究,RUN
仅当通过命令构建映像时才执行指令docker build
,并且CMD
当创建容器并从该自定义映像运行时执行该指令。
因此执行docker build
命令如下:
docker build -t my-ubuntu:001 .
按预期工作并执行docker run
命令如下:
docker run --name my-ubuntu-001-001 -it my-ubuntu:001
按预期工作,主要是Hello From Docker to Ubuntu
关于tty
. 到这里为止就好了。
现在,存在以下等价关系:
docker run
=docker create
+docker start
因此,可以从同一自定义映像创建并运行容器,如下所示:
docker create --name my-ubuntu-001-002 my-ubuntu:001
docker start my-ubuntu-001-002
这对夫妇的奇怪之处在于该Hello From Docker to Ubuntu
消息没有显示在tty
. 那么为什么这里没有显示该消息呢?这是预期的行为还是缺少某些内容?
您需要该
-a
标志将容器stdout/stderr连接到您的终端。否则,容器将打印该消息,但不会显示在您的终端中。固定命令:
文档。
另请参阅
-i
标志 to ,如果您希望附加标准docker start
输入,则需要该标志。