AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 455262
Accepted
slm
slm
Asked: 2018-07-14 22:42:04 +0800 CST2018-07-14 22:42:04 +0800 CST 2018-07-14 22:42:04 +0800 CST

如何保护 Docker 容器使其始终运行?

  • 772

我有一个在多台开发人员笔记本电脑上运行的 HBase Docker 容器。当开发人员关闭他们的笔记本电脑时,Docker 容器总是会死掉并停止运行。

这就是我们调用容器的方式:

$ docker run -d --hostname hbase-db --name hbase \
     -p 2181:2181   -p 8080:8080   -p 8085:8085   -p 9090:9090 -p 9095:9095 \
     -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 \
     harisekhon/hbase

问题

我怎样才能保护这个容器,以便它在/如果它死了时会自动重新启动?

docker services
  • 1 1 个回答
  • 940 Views

1 个回答

  • Voted
  1. Best Answer
    slm
    2018-07-14T22:42:04+08:002018-07-14T22:42:04+08:00

    Docker 重启策略

    Docker 提供了一个解决此问题的功能,称为Docker 重启策略:

    Docker 提供重启策略来控制容器是在退出时自动启动,还是在 Docker 重启时自动启动。重启策略确保链接容器以正确的顺序启动。Docker 建议您使用重启策略,并避免使用进程管理器来启动容器。

    重启策略的类型:

    no                  Do not automatically restart the container. (the default)
    
    on-failure          Restart the container if it exits due to an error, which
                        manifests as a non-zero exit code.
    
    unless-stopped      Restart the container unless it is explicitly stopped or 
                        Docker itself is stopped or restarted.
    
    always              Always restart the container if it stops.
    

    用法

    然后,您可以像这样使用它的重启策略:

    $ docker run -dit --restart always redis
    

    注意事项

    • 重启策略只有在容器启动成功后才会生效。在这种情况下,启动成功意味着容器至少启动了 10 秒,并且 Docker 已经开始对其进行监控。这可以防止根本没有启动的容器进入重启循环。

    • 如果你手动停止一个容器,它的重启策略会被忽略,直到 Docker 守护进程重启或者容器被手动重启。这是防止重启循环的另一种尝试。

    • 重启策略仅适用于容器。swarm 服务的重启策略配置不同。查看与服务重启相关的标志。

    例子

    在这里,我们将使用hello-world Docker 容器来说明它是如何工作的。

    首先,我们将其拉下:

    $ docker pull hello-world
    Using default tag: latest
    Trying to pull repository docker.io/library/hello-world ...
    latest: Pulling from docker.io/library/hello-world
    9db2ca6ccae0: Pull complete
    Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
    Status: Downloaded newer image for docker.io/hello-world:latest
    $ 
    

    下载我们的容器后,让我们运行它:

    $ docker run -dit --restart always hello-world
    0f6a61dddd3b667727a20df2c198941b2202653a71b6c86b8ace7b236bafc974
    

    如果我们运行几个,docker ps我们会看到它一遍又一遍地重新启动:

    $ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                              PORTS               NAMES
    0f6a61dddd3b        hello-world         "/hello"            27 seconds ago      Up Less than a second                                   upbeat_brown
    
    ...time passes...
    
    $ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                              PORTS               NAMES
    0f6a61dddd3b        hello-world         "/hello"            5 minutes ago       Restarting (0) About a minute ago                       upbeat_brown
    
    ...time passes...
    $ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
    0f6a61dddd3b        hello-world         "/hello"            10 minutes ago      Restarting (0) 3 minutes ago                       upbeat_brown
    

    查看 Docker 日志,我们可以看到它已多次重新启动:

    $ docker logs 0f6a61dddd3b -f | grep "Hello from Docker"
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    Hello from Docker!
    

    完成后,请务必停止容器,以免它永远重新启动:

    $ docker stop 0f6
    0f6
    

    你的修复

    要解决您的问题,只需像这样运行您的 HBase Docker 容器:

    $ docker run -d --hostname hbase-db --name hbase --restart always \
        -p 2181:2181   -p 8080:8080   -p 8085:8085   -p 9090:9090   -p 9095:9095 \
        -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 \
        harisekhon/hbase
    

    参考

    • 自动启动容器
    • 3

相关问题

  • 连接到 docker 主机!

  • Dockerfile 中 VOLUME 指令的目的是什么?

  • 来自 `service | 的意外结果 grep`

  • 如何在 RHEL 7 上离线安装 docker?

  • 我只需要运行这个脚本文件一次吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve