docker 我怎样才能保持码头集装箱运行?

ulmd4ohb  于 2022-11-22  发布在  Docker
关注(0)|答案(7)|浏览(155)

我想自动运行多个容器并创建一些东西,
但有些图像(如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".

我无法理解这个错误...我如何保持群容器运行...?
(对不起,我的英语不好))

mqxuamgl

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

kgqe7b3p

kgqe7b3p2#

首先,您不希望混合使用-i-d开关。您希望在交互模式或分离模式下运行容器。在分离模式下:

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

也不需要使用-t标志分配tty,因为这只需要在交互模式下完成。
你应该看看Docker run reference

bfnvny8b

bfnvny8b3#

Docker容器执行两种类型的任务。一种是执行和退出&另一种是在后台运行它。
要在后台运行Docker容器,有几个选项。
1.使用shell运行. docker run -it <image> /bin/bash
1.对于连续运行的container. docker run -d -p 8080:8080 <image>。假定映像将暴露端口8080并处于侦听模式。

k97glaaz

k97glaaz4#

在/dev/null上添加一个尾巴是很好的,但是为什么不让它做一些有用的事情呢?
下面的命令将收集孤立进程,因此没有僵尸进程(已失效)在周围浮动。而且一些init.d / restart脚本不允许这样做。

exec sh -c 'while true ;do wait ;done'
wwtsj6pe

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 此命令将停止容器(因为这是完整的命令,如果我们在正常终端中执行,它将执行并终止,这种类型的命令也将终止容器)。
我希望这对你有帮助。

yqkkidmi

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中发布您的问题
谢谢您...

gg0vcinb

gg0vcinb7#

使容器运行

docker run --rm -d --name=tmp ubuntu sleep infinity

从dorment容器请求命令的示例

docker exec tmp echo hello from container

注意事项:

  • --rm删除已停止的容器
  • -d在后台运行容器
  • --name=tmp命名容器,以便您控制如何表示它
  • ubuntu推送一个light图像来执行您的命令
  • sleep infinity保存容器数据库

相关问题