![](/img/trans.png)
[英]Why does different container of same elasticsearch image on docker exits out?
[英]Docker container exits as soon as I start it
当我运行或启动 Docker 容器时,它不会继续运行。 Docker start 只会返回我给它的任何容器的名称,但实际上不会做任何事情。 Docker run (ex $ docker run -p 8080:80 --name hello -d hello-world) 将创建它,但它会立即退出。
如果我在其中之一之后运行 docker ps ,它将不会显示当前正在运行的任何内容。 如果我运行 docker ps -a,它将显示我的所有容器,并显示我刚刚尝试运行的容器在几秒钟前退出。
这很常见吗?如何让我的容器保持运行? 我正在尝试学习如何使用 Docker,这是最糟糕的经历之一。 感谢您的任何帮助或建议
在您的命令中,您指定-d
标志(也称为分离),这意味着Run container in background and print container ID
(来自Docker 文档)。 在这里查看更多讨论: Docker container will automatically stop after "docker run -d"
docker run -p 8080:80 --name hello -d hello-world
如果您在没有-d
标志的情况下运行它,它应该在前台运行并将 output 发送到您的终端
docker run -p 8080:80 --name hello hello-world
您看不到它在docker ps -a
中运行,因为该容器只是执行 hello-world 脚本并退出。 如果容器启动了一个长时间运行的进程,那么您将能够在docker ps -a
中找到它。 为了验证这一点,您可以尝试运行提供“hello world”/演示页面的 nginx 演示容器(例如nginx-hello )。
Docker 容器通常用于在隔离环境中运行应用程序/进程。
当您运行 hello-world 映像时,它会创建一个容器,该容器仅用于使用标准 output 打印出名称。 这是唯一运行的进程,并且容器完成了它的工作。 这就是为什么您在完成docker ps
后什么也看不到的原因。
为了保持容器运行,您需要在该容器内有一个可以运行的进程(例如:服务器、数据库、应用程序等)
尝试从 mysql 镜像创建一个容器,然后检查正在运行的容器。
这很常见吗?如何让我的容器保持运行?
启动 Docker 容器时会发生什么?
默认情况下,它执行 Dockerfile 映像中指定的命令/入口点。 通常,该命令或入口点是位于映像中的脚本或程序。
当该脚本/程序退出时,容器也会退出。 就这样。
为了使容器保持活动状态,脚本/程序必须保持运行。
您启动一个 hello 图像容器,一个“hello”容器说“hello”并退出。 这可能是一个简单的脚本:
#!/bin/sh
echo "hello"
所以预计会完成并退出容器。 运行数据库或 web 服务器,您将看到不同的行为。 脚本/程序继续运行......而你不停止它。 因此,当您不停止容器时,容器也会保持运行。
为了进行实验,您可以使用无限命令运行您的hello-world
容器:
docker run -p 8080:80 --name hello -d hello-world --entrypoint tail -f /dev/null
您将看到容器保持运行。
要知道您的容器有什么问题,请使用 (docker logs (您的容器名称)) 命令。
然后你可以找出你的容器出了什么问题
docker 容器在其主进程完成时退出。 hello-world
主进程只打印一些文本并退出,因此容器也退出。
你可以直接运行这个命令来查看它的文本:
docker run hello-world
如果你想要一个正在运行的容器,也许你可以试试nginx 演示:
docker run --name nginx-demo -p 8080:80 -d nginx
然后您可以使用 web 浏览器访问http://localhost:8080
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.