如何检查Docker的重启策略是否有效

jqjz2hbq  于 2023-03-22  发布在  Docker
关注(0)|答案(5)|浏览(121)

在Docker文档中,可以设置restart policy参数。
如何验证容器退出时容器确实重启?如何手动触发容器退出,并观察容器是否重启?
我的环境是Mac和boot2docker。
谢谢

vom3gejh

vom3gejh1#

运行容器后,您可以检查其策略,重新启动coun和上次启动时间:

docker inspect -f "{{ .HostConfig.RestartPolicy }}" <container_id>
docker inspect -f "{{ .RestartCount }}" <container_id>
docker inspect -f "{{ .State.StartedAt }}" <container_id>

然后,您可以查看容器进程:

docker exec -it <container_id> ps -aux

PID 1进程-是主进程,在其死亡后,整个容器将死亡。
杀死它使用:

docker exec -it <container_id> kill -9 <pid>

然后确保容器自动重启:

docker inspect -f "{{ .RestartCount }}" <container_id>
dphi5xsq

dphi5xsq2#

你也可以docker exec -it container_id bash然后kill -9的主进程.我用docker run -d --restart=always -e DISPLAY=$DISPLAY -v /home/gg/moncontainer:/home/gg -v /tmp/.X11-unix:/tmp/.X11-unix k3ck3c/captvty测试我杀了主进程(pid 5,Captvty.exe),被注销的容器,和2秒后,它被重新启动,窗口被再次创建

cbeh67ev

cbeh67ev3#

我只是手动创建了一个容器,像这样:

docker run -d --restart=always tacodata/pythondev sleep 10

注意,守护进程启动,但容器在10秒内退出。每次我做一个docker ps我看到:

core@pa2 ~ $ docker ps
CONTAINER ID        IMAGE                                     COMMAND             CREATED              STATUS              PORTS                    NAMES
69cbae4b6459        tacodata/pythondev:latest                 "sleep 10"          About a minute ago   Up 9 seconds        5000/tcp                 high_colden

所以,容器是在一分钟前创建的,但状态只显示了9秒。它一直在重新启动。您可以从以下位置获得该信息:

core@pa2 ~ $ docker inspect high_colden
[{
"AppArmorProfile": "",
...
"Path": "sleep",
"ProcessLabel": "",
"ResolvConfPath": "/var/lib/docker/containers/69cbae4b645926b14d86effcfaaa7735119e7f0c8afb0baff5cc1913583bf35a/resolv.conf",
"RestartCount": 16,
"State": {
    "Error": "",
    "ExitCode": 0,
    "FinishedAt": "2015-04-16T16:36:15.325629703Z",
    "OOMKilled": false,
    "Paused": false,
    "Pid": 13453,
    "Restarting": false,
    "Running": true,
    "StartedAt": "2015-04-16T16:36:15.860163812Z"
},
"Volumes": {},
"VolumesRW": {}
}
zsbz8rwp

zsbz8rwp4#

你也可以重新启动docker服务,看看它是否在启动时启动了容器。例如,在Ubuntu下,

sudo service docker restart
g52tjvyc

g52tjvyc5#

另一种选择:

  • 使用docker ps获取要杀死的容器的Container ID。
  • 然后执行ps -efa | grep <Container ID>以获取进程ID。
  • 然后执行sudo kill -9 <Process ID>

相关问题