我想自动运行多个容器并创建一些东西,
但有些图像(如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"
但是“Docker ps”没有显示任何内容,我尝试通过键入以下内容来构建Dockerfile:
FROM swarm
ENTRYPOINT ["echo"]
和“The image does not run(映像无法运行)”,并显示错误消息:
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".
我无法理解这个错误...我如何保持群容器运行...?
(对不起,我的英语不好))
7条答案
按热度按时间mqxuamgl1#
建议使用**-d**,因为您只需使用一个命令就可以运行容器,而不需要通过按Ctrl + P + Q来分离容器的终端。
但是,-d选项有问题。您的容器会立即停止**,除非命令没有在前台运行。Docker要求您的命令保持在前台运行。否则,它会认为您的应用程序停止并关闭容器。**
问题是某些应用程序没有在前台运行。
在这种情况下,你可以在命令中添加tail -f /dev/null,这样,即使你的主命令在后台运行,你的容器也不会停止,因为tail命令一直在前台运行。
停靠器运行-d蜂群尾部-f /dev/null
Docker ps显示容器
现在,您可以使用docker exec container_name命令附加容器
或
Docker运行-d swarm命令tail -f /dev/null
kgqe7b3p2#
首先,您不希望混合使用
-i
和-d
开关。您希望在交互模式或分离模式下运行容器。在分离模式下:也不需要使用
-t
标志分配tty,因为这只需要在交互模式下完成。你应该看看
Docker run reference
bfnvny8b3#
Docker容器执行两种类型的任务。一种是执行和退出&另一种是在后台运行它。
要在后台运行Docker容器,有几个选项。
1.使用shell运行.
docker run -it <image> /bin/bash
1.对于连续运行的container.
docker run -d -p 8080:8080 <image>
。假定映像将暴露端口8080并处于侦听模式。k97glaaz4#
在/dev/null上添加一个尾巴是很好的,但是为什么不让它做一些有用的事情呢?
下面的命令将收集孤立进程,因此没有僵尸进程(已失效)在周围浮动。而且一些init.d / restart脚本不允许这样做。
wwtsj6pe5#
你是正确的docker run -itd swarm(没有为容器给予参数(bash -c“while true;做睡眠1; done”))可以正常工作。如果您为docker run传递参数,它将运行命令并终止容器。如果您想永久运行容器,请首先使用docker run -itd swarm启动容器,然后使用docker ps检查容器是否运行。现在容器运行,如果要执行容器中任何命令,请使用docker exec -itd container_name命令记住:仅使用不停止容器的命令。bash -c“while true;做睡眠1; done 此命令将停止容器(因为这是完整的命令,如果我们在正常终端中执行,它将执行并终止,这种类型的命令也将终止容器)。
我希望这对你有帮助。
yqkkidmi6#
基本上这是方法,但你的 Docker 图像是群,所以它是不同的,我不知道群 Docker 图像,我没有使用。但我研究后,首先我运行 Docker 群图像它显示。,
之后,我明白我们运行docker swarm image只使用了图片中的五个命令,如创建,列表管理,加入,帮助。如果我们运行swarm image没有命令,如docker run -itd swarm,它采取的命令为--help。对不起,但我不知道什么是swarm image的目的。更多用法请查看https://hub.docker.com/_/swarm/。
我添加的答案docker run -itd image tail -f /dev/null不是针对群映像,而是针对ubuntu、fedora、centos等docker映像。
只需阅读swarm image的用法以及使用它的原因。
之后,如果您有任何问题,请在https://github.com/docker/swarm-library-image/issues中发布您的问题
谢谢您...
gg0vcinb7#
使容器运行
从dorment容器请求命令的示例
注意事项:
--rm
删除已停止的容器-d
在后台运行容器--name=tmp
命名容器,以便您控制如何表示它ubuntu
推送一个light图像来执行您的命令sleep infinity
保存容器数据库