繁体   English   中英

Docker 容器一启动就退出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM