Image Docker容器一启动就退出

Image Docker容器一启动就退出,image,docker,nginx,containers,Image,Docker,Nginx,Containers,当我运行或启动Docker容器时,它不会一直运行。 Docker start将只返回我给它的任何容器的名称,但实际上不会执行任何操作。Docker run(例如$Docker run-p8080:80——名称hello-dHello world)将创建它,但它将立即退出 如果我在其中一个之后运行docker ps,它将不会显示当前正在运行的任何内容。 如果我运行docker ps-a,它将显示我的所有容器,并显示我刚刚尝试运行的容器,该容器已在几秒钟前退出 这很常见吗?如何使容器保持运行?我正在

当我运行或启动Docker容器时,它不会一直运行。 Docker start将只返回我给它的任何容器的名称,但实际上不会执行任何操作。Docker run(例如$Docker run-p8080:80——名称hello-dHello world)将创建它,但它将立即退出

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


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

在命令中,您指定了
-d
标志(也称为detach),这意味着
在后台运行容器并打印容器ID
(从)。请参见此处的更多讨论:

docker run-p8080:80——名称hello-d hello world

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

docker-run-p8080:80——名称hello-hello-world


您看不到它在
docker ps-a
中运行,因为该容器只是执行hello-world脚本并退出。如果容器启动了一个长时间运行的进程,那么您可以在
docker ps-a
中找到它。要验证这一点,您可以尝试运行提供“hello world”/demo页面的nginx演示容器(例如)。

在您的命令中,指定
-d
标志(aka detach),这意味着
在后台运行容器并打印容器ID
(从)。请参见此处的更多讨论:

docker run-p8080:80——名称hello-d hello world

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

docker-run-p8080:80——名称hello-hello-world

您看不到它在
docker ps-a
中运行,因为该容器只是执行hello-world脚本并退出。如果容器启动了一个长时间运行的进程,那么您可以在
docker ps-a
中找到它。为了验证这一点,您可以尝试运行nginx演示容器(例如),该容器提供“helloworld”/demo页面

这很常见吗?如何使容器保持运行

启动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容器时会发生什么情况?
默认情况下,它执行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 logs(您的容器名称))命令出了什么问题


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

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

运行hello world映像时,它会创建一个容器,该容器的唯一目的是使用标准输出打印出名称。这是唯一一个运行的进程,容器完成了它的工作。这就是为什么在完成时什么也看不到的原因
docker ps

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


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

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

运行hello world映像时,它会创建一个容器,该容器的唯一目的是使用标准输出打印出名称。这是唯一一个运行的进程,容器完成了它的工作。这就是为什么在完成时什么也看不到的原因
docker ps

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


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

docker容器在其主进程完成后退出。
hello world
主进程刚刚启动