【问题标题】:Docker container exits as soon as I start itDocker容器一启动就退出
【发布时间】:2020-08-07 16:03:05
【问题描述】:

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

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

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

【问题讨论】:

  • 查看容器日志是否启动容器内进程出错。 (docker logs ...)。
  • 这很常见吗?如何让我的容器保持运行?您的 docker 是否正在运行一个长时间运行的进程,例如 Web 服务器、数据库,或者只是一个脚本你好世界节目?查看自学教程docs.docker.com/get-started/resources/

标签: image docker nginx containers


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    在您的命令中,您指定-d 标志(又名分离),这意味着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)。

    【讨论】:

      【解决方案3】:

      要知道您的容器出了什么问题,请使用 (docker logs (您的容器名称)) 命令。

      然后你就可以找出你的容器出了什么问题

      【讨论】:

        【解决方案4】:

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

        启动 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
        

        你会看到容器一直在运行。

        【讨论】:

          【解决方案5】:

          docker 容器在其主进程完成时退出。 hello-world 主进程只是打印一些文本并退出,所以容器也退出了。

          你可以直接运行这个命令来查看它的文本:

          docker run hello-world
          

          如果你想要一个正在运行的容器,也许你可以试试nginx demo

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

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

          【讨论】:

            猜你喜欢
            • 2019-07-13
            • 1970-01-01
            • 2020-01-23
            • 2018-05-12
            • 2017-04-30
            • 1970-01-01
            • 2020-08-11
            • 2022-12-22
            • 1970-01-01
            相关资源
            最近更新 更多