如何让docker容器保持运行?

hae*_*ney 7 containers docker

我想自动运行多个容器并创建一些东西,

但是一些图像,例如swarm,会在跑步或开始后自动停止.

我已经尝试过了

docker run -d swarm

docker run -d swarm /bin/bash tail -f /dev/null

docker run -itd swarm bash -c "while true; do sleep 1; done"
Run Code Online (Sandbox Code Playgroud)

但'docker ps'什么都没显示,我试着通过输入以下内容来构建Dockerfile:

FROM swarm
ENTRYPOINT ["echo"]
Run Code Online (Sandbox Code Playgroud)

并且图像不会运行,并显示错误消息:

docker: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"exec: \\\"echo\\\": executable file not found in $PATH\"\n".
Run Code Online (Sandbox Code Playgroud)

我无法理解这个错误......我怎么能让swarm容器运行..?

(抱歉,我的英语不好))

Cyc*_*ode 9

首先,你不想混合-i-d交换机.要么以交互模式或分离模式运行容器.在你的情况下处于分离模式:

docker run -d swarm /bin/bash tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)

也不需要使用-t标志分配tty ,因为这只需要在交互模式下完成.

你应该看看 Docker run reference


Nav*_*a.s 5

建议使用-d,因为只需一个命令就可以运行容器,而不需要通过按Ctrl + P + Q来分离容器的终端.

但是,-d选项存在问题.除非命令未在前台运行,否则容器会立即停止. Docker 要求您的命令继续在前台运行.否则,它认为您的应用程序停止并关闭容器.

问题是某些应用程序不在前台运行.

在这种情况下,您可以在命令中添加tail -f/dev/null.通过这样做,即使您的主命令在后台运行,您的容器也不会停止,因为尾部在前台继续运行.

docker run -d swarm tail -f/dev/null

docker ps显示容器

现在,您可以使用docker exec container_name命令附加容器

要么

docker run -d swarm命令tail -f/dev/null