Docker 容器 exited 自动重启

Docker 是一种用于构建、发布和运行应用程序的开源平台。它利用容器技术,可以将应用程序和其依赖项打包到一个独立的、可移植的容器中,从而实现了应用程序在不同环境中的一致性运行。

在使用 Docker 运行容器时,有时会遇到容器自动退出的情况。这可能是由于应用程序出错、容器资源不足或配置不正确等原因导致的。为了保证容器的高可用性,我们可以通过设置 Docker 容器的自动重启策略来解决这个问题。

Docker 容器自动重启策略

Docker 提供了几种不同的容器自动重启策略,可以根据实际需求选择合适的策略。

  1. no:不重启容器。当容器退出时,Docker 不会尝试重新启动容器。

  2. on-failure:仅在容器异常退出时才重启容器。可以指定重启的最大次数。

  3. always:总是重启容器,无论容器是正常退出还是异常退出。

  4. unless-stopped:在容器正常退出时重启容器,但不会在容器被停止时重启。

设置容器自动重启策略

要设置容器的自动重启策略,可以使用 docker run 命令的 --restart 参数。

下面是一个示例,展示了如何创建一个自动重启策略为 always 的容器:

docker run -d --restart=always my-container

在此示例中,-d 标志表示容器以后台模式运行,--restart=always 表示容器在任何情况下都会被自动重启。

示例应用

让我们通过一个示例应用来演示容器自动重启策略的用法。

创建一个 Python Flask 应用

我们将创建一个使用 Python Flask 框架编写的简单 Web 应用。

首先,我们需要创建一个名为 app.py 的 Python 文件,并将以下代码复制到文件中:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker!"

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

这个应用非常简单,当访问根路径时,将返回一条简单的问候信息。

创建 Dockerfile

接下来,我们需要创建一个名为 Dockerfile 的文件,并将以下代码复制到文件中:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app.py .

CMD ["python", "app.py"]

这个 Dockerfile 文件定义了我们的容器镜像。它使用 Python 3.9 作为基础镜像,将我们的应用代码复制到容器的 /app 目录中,并安装依赖项。

构建容器镜像

现在,我们可以使用以下命令来构建容器镜像:

docker build -t my-flask-app .

这将会根据 Dockerfile 构建一个名为 my-flask-app 的容器镜像。

运行容器

最后,我们可以使用以下命令来运行容器:

docker run -d --restart=always -p 5000:5000 my-flask-app

在此命令中,--restart=always 指定容器在任何情况下都会自动重启,-p 5000:5000 将容器内部的 5000 端口映射到主机上的 5000 端口,以便我们可以通过 http://localhost:5000 访问应用程序。

总结

本文介绍了 Docker 容器自动重启策略,并提供了一个使用 Python Flask 编写的示例应用。通过设置适当的自动重启策略,可以确保容器具