我启动Docker容器后就会立即退出

时间:2020-08-07 16:03:05

标签: image docker nginx containers

当我运行或启动Docker容器时,它将不会保持运行状态。 Docker start只会返回我给它的任何容器的名称,但实际上不会做任何事情。 Docker run(例如$ docker run -p 8080:80 --name hello -d hello-world)将创建它,但它将立即退出。

如果我在其中之一之后运行docker ps,它将不会显示当前正在运行的任何内容。 如果我运行docker ps -a,它将显示我的所有容器,并显示几秒钟前退出的我刚刚尝试运行的容器。

这很常见吗?如何使容器保持运行?我正在尝试学习如何使用Docker,这一直是最糟糕的经历之一。谢谢您的帮助或建议

5 个答案:

答案 0 :(得分:1)

在命令中,指定-d标志(又名detach),这意味着Run container in background and print container ID(来自Docker docs)。在此处查看有关此内容的更多讨论:Docker container will automatically stop after "docker run -d"

docker run -p 8080:80 --name hello -d hello-world

如果在没有-d标志的情况下运行它,则它应该在前台运行并将输出发送到终端

docker run -p 8080:80 --name hello hello-world

您看不到它在docker ps -a中运行,因为该容器仅执行hello-world脚本并退出。如果容器开始长时间运行,则可以在docker ps -a中找到它。为了验证这一点,您可以尝试运行可用于“ hello world” /演示页面的nginx演示容器(例如nginx-hello)。

答案 1 :(得分:1)

Docker容器通常用于在隔离的环境中运行应用程序/进程。

当您运行hello-world映像时,它将创建一个容器,该容器仅用于使用标准输出打印名称。那是唯一运行的过程,容器已完成其工作。这就是为什么docker ps完成后您什么都看不到。

为了保持容器运行,您需要在该容器内有一个要运行的进程(例如:服务器,数据库,应用程序等)

尝试从mysql映像创建容器,然后检查正在运行的容器。

答案 2 :(得分:0)

这很常见吗?如何使我的容器保持运行状态?

启动Docker容器时会发生什么?
默认情况下,它执行Dockerfile映像中指定的命令/ the entrypoint。 通常,该命令或入口点是映像中的脚本或程序。
当该脚本/程序退出时,容器也退出。就是这样。

要使容器保持活动状态,脚本/程序必须保持运行状态。
您启动一个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

您将看到该容器保持运行状态。

答案 3 :(得分:0)

要了解您的容器使用了什么问题(docker日志(您的容器名称))命令。

然后您可以找出容器出了什么问题

答案 4 :(得分:0)

泊坞窗容器在其主要过程完成时退出。 hello-world主进程仅打印一些文本并退出,因此容器也退出。

您可以直接运行此命令以查看其文本:

docker run hello-world

如果您想要一个运行中的容器,也许可以尝试使用nginx demo

docker run --name nginx-demo -p 8080:80 -d nginx

然后您可以使用网络浏览器访问http://localhost:8080