1.了解 --restart 选项的可用值

        各值核心区别对比

重启策略值失败退出(非 0 码)成功退出(0 码)Docker 守护进程重启后手动 stop 后是否重启
no(默认)不重启不重启不重启不重启
on-failure[:n]重启(最多 n 次)不重启若未达次数则重启不重启
always重启重启重启(除非已删除)不重启(daemon 重启后恢复)
unless-stopped重启重启未手动 stop 则重启不重启(daemon 重启也不恢复)

2.测试容器自动重启策略

        1.运行一个始终重启的 Redis 容器

[root@host1 ~]# docker run -d --name testredis --restart=always redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
d107e437f729: Already exists 
a3f725691cac: Pull complete 
bd022da7d981: Pull complete 
349073970fc7: Pull complete 
cf596724f63e: Pull complete 
4f4fb700ef54: Pull complete 
d7e6e9e45ecf: Pull complete 
Digest: sha256:acb90ced0bd769b7c04cb4c32c4494ba7b3e0ee068bdbfff0eeb0d31c2a21078
Status: Downloaded newer image for redis:latest
4793ed14dab78f0b3dfd543407a865f9d6992b0ea4e61658ddcc8fa57a0c0c48

        2.查看当前运行的容器列表

[root@host1 ~]# docker container ls
CONTAINER ID   IMAGE      COMMAND                   CREATED          STATUS          PORTS                                         NAMES
4793ed14dab7   redis      "docker-entrypoint.s…"   41 seconds ago   Up 40 seconds   6379/tcp                                      testredis
0dbf7ea2178e   registry   "/entrypoint.sh /etc…"   4 days ago       Up 42 minutes   0.0.0.0:5000->5000/tcp, [::]:5000->5000/tcp   myregistry

        3.测试该容器是否自动启动

                停止 Docker

[root@host1 ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket

                停止 docker.socket 以停用 Docker 自动唤醒机制

[root@host1 ~]# systemctl stop docker.socket

                查看当前是否有容器正在运行

[root@host1 ~]# docker container ls
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

        4.启用 Docker 并查看当前是否有容器正在运行

root@host1 ~]# systemctl start docker
[root@host1 ~]# docker container ls
CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS                                         NAMES
4793ed14dab7   redis      "docker-entrypoint.s…"   2 minutes ago   Up 4 seconds   6379/tcp                                      testredis
0dbf7ea2178e   registry   "/entrypoint.sh /etc…"   4 days ago      Up 4 seconds   0.0.0.0:5000->5000/tcp, [::]:5000->5000/tcp   myregistry

        5.指定 Docker 尝试重启容器的最大次数

[root@host1 ~]# docker update --restart=on-failure:3 testredis
testredis

        6.停止该容器并删除该容器

[root@host1 ~]# docker stop redis && docker rm redis
Error response from daemon: No such container: redis
[root@host1 ~]# docker ps -a | grep redis
4793ed14dab7   redis                   "docker-entrypoint.s…"   7 minutes ago   Up 4 minutes         
     6379/tcp                                      testredis
[root@host1 ~]# docker stop 4793ed && docker rm 4793ed
4793ed
4793ed

        注意:这里容器名搞错了,正确为 testredis ;或者用 ID。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐