Docker sleep命令的作用是什么?

Docker sleep命令的作用是什么?,docker,docker-compose,dockerfile,docker-swarm,docker-machine,Docker,Docker Compose,Dockerfile,Docker Swarm,Docker Machine,我找不到一个关于Docker sleep命令的明确解释,所以有人能解释一下吗?例如: docker container run -d alpine sleep 1d 我在网上看过,但找不到简单的解释 docker container run -d --name mycontainer myimage:mytag sleep infinity 图像名称后面的最后一部分(即,sleep infinity)不是docker命令,而是发送到容器以覆盖其默认命令(在“Dockerfile”中设置)的命

我找不到一个关于Docker sleep命令的明确解释,所以有人能解释一下吗?例如:

docker container run -d alpine sleep 1d
我在网上看过,但找不到简单的解释

docker container run -d --name mycontainer myimage:mytag sleep infinity
图像名称后面的最后一部分(即,
sleep infinity
)不是docker命令,而是发送到容器以覆盖其默认命令(在“Dockerfile”中设置)的命令

文档摘录(您可以在终端中键入
man sleep
,它可能因实现而异)

暂停几秒钟。后缀可以是秒的“s”(默认值), “m”代表分钟,“h”代表小时,“d”代表天

令我惊讶的是,参数
infinity
没有在我的实现中记录,但仍然被接受。这很容易理解:它无限期地暂停(即,直到命令停止/终止)。在上面的示例中,它将暂停一天

使用
sleep
作为运行docker容器的命令的通常原因是什么?

docker容器将一直存在,直到其运行的命令完成。此命令通常在用于构建映像的
Dockerfile
中设置(在
CMD
节中),并且可以在命令行上重写(如上述示例所示)

许多基本映像(如用于debian的基本操作系统、ubuntu、centos……)将运行shell作为默认命令(
bash
sh
)。如果您尝试使用其默认命令从该图像生成容器,它将一直存在,直到shell退出

当以交互方式运行这样一个映像时(即使用
docker container run-it…
),它将一直运行到您结束shell会话为止。但是如果您想在后台启动它(即使用
docker container run-d…
),它将立即退出,留下一个停止的容器

在这种情况下,您可以通过使用长时间运行的命令覆盖默认命令来“伪造”长时间运行的服务,该命令基本上不执行任何操作,只等待容器停止。两个广泛使用的命令是
sleep infinity
(或适合您需要的任何时段)和
tail-f/dev/null

在您启动了这样一个容器之后,您可以使用它来测试您需要的任何东西。最常见的方法是对其运行交互式shell:

# command will depend on shells available in your image
docker exec -it mycontainer [bash|sh|zsh|ash|...]
完成实验/测试后,您可以停止并回收容器

docker container stop mycontainer
docker container rm mycontainer
图像名称后面的最后一部分(即,
sleep infinity
)不是docker命令,而是发送到容器以覆盖其默认命令(在“Dockerfile”中设置)的命令

文档摘录(您可以在终端中键入
man sleep
,它可能因实现而异)

暂停几秒钟。后缀可以是秒的“s”(默认值), “m”代表分钟,“h”代表小时,“d”代表天

令我惊讶的是,参数
infinity
没有在我的实现中记录,但仍然被接受。这很容易理解:它无限期地暂停(即,直到命令停止/终止)。在上面的示例中,它将暂停一天

使用
sleep
作为运行docker容器的命令的通常原因是什么?

docker容器将一直存在,直到其运行的命令完成。此命令通常在用于构建映像的
Dockerfile
中设置(在
CMD
节中),并且可以在命令行上重写(如上述示例所示)

许多基本映像(如用于debian的基本操作系统、ubuntu、centos……)将运行shell作为默认命令(
bash
sh
)。如果您尝试使用其默认命令从该图像生成容器,它将一直存在,直到shell退出

当以交互方式运行这样一个映像时(即使用
docker container run-it…
),它将一直运行到您结束shell会话为止。但是如果您想在后台启动它(即使用
docker container run-d…
),它将立即退出,留下一个停止的容器

在这种情况下,您可以通过使用长时间运行的命令覆盖默认命令来“伪造”长时间运行的服务,该命令基本上不执行任何操作,只等待容器停止。两个广泛使用的命令是
sleep infinity
(或适合您需要的任何时段)和
tail-f/dev/null

在您启动了这样一个容器之后,您可以使用它来测试您需要的任何东西。最常见的方法是对其运行交互式shell:

# command will depend on shells available in your image
docker exec -it mycontainer [bash|sh|zsh|ash|...]
完成实验/测试后,您可以停止并回收容器

docker container stop mycontainer
docker container rm mycontainer

这似乎不是一个好主意;你能澄清一下你在问什么用吗?@DavidMaze我编辑了我的问题,并举例说明如何使用它。这不是docker命令。这只是在容器中运行普通的linux
sleep
命令。回想一下,
docker-run
的语法大体上是
docker-run
,默认情况下,
只传递给shell。@larsks好的,我现在明白了,谢谢。这似乎不是一个好问题;你能澄清一下你在问什么用吗?@DavidMaze我编辑了我的问题,并举例说明如何使用它。这不是docker命令。这只是在容器中运行普通的linux
sleep
命令。回想一下,
docker-run
的语法大体上是
docker-run
,默认情况下,
只传递给shell。@larsks好的,我现在明白了,谢谢。太神奇了,谢谢Zeitounator的清晰详细解释。你肯定已经帮我澄清了。祝你有美好的一天!太棒了,谢谢Zeitounator的清晰详细的解释。你肯定已经帮我澄清了。祝你有美好的一天!