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

如何检查Docker的重启策略是否有效,docker,boot2docker,Docker,Boot2docker,在Docker中,可以设置重启策略参数 当容器退出时,如何验证容器是否确实重新启动。如何手动触发容器退出,并观察容器是否重新启动 我的环境是Mac和boot2docker 谢谢我刚刚手动创建了一个容器,如下所示: docker run -d --restart=always tacodata/pythondev sleep 10 请注意,守护进程将启动,但容器将在10秒内退出。每次我做docker ps时,我都会看到: core@pa2 ~ $ docker ps CONTAINER ID

在Docker中,可以设置
重启策略
参数

当容器退出时,如何验证容器是否确实重新启动。如何手动触发容器退出,并观察容器是否重新启动

我的环境是Mac和boot2docker


谢谢

我刚刚手动创建了一个容器,如下所示:

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": {}
}

您还可以
docker exec-it container\u 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秒后它被重新启动,运行容器后再次创建了该窗口,您可以检查其策略、重新启动CONN和上次启动时间:

docker inspect -f "{{ .HostConfig.RestartPolicy }}" <container_id>
docker inspect -f "{{ .RestartCount }}" <container_id>
docker inspect -f "{{ .State.StartedAt }}" <container_id>
docker-inspect-f“{{.HostConfig.RestartPolicy}”
docker inspect-f“{.restarcount}”
docker inspect-f“{.State.StartedAt}”
然后,您可以查看容器流程:

docker exec -it <container_id> ps -aux
docker exec-it ps-aux
PID 1进程-是主进程,在其死亡后,整个容器将死亡

用枪杀了他

docker exec -it <container_id> kill -9 <pid>
docker exec-it kill-9
在此之后,确保容器自动重新启动:

docker inspect -f "{{ .RestartCount }}" <container_id>
docker-inspect-f“{{.restarcount}”

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

sudo service docker restart

很酷,我学习了一个新命令
docker exec-it bash
来进入容器外壳。谢谢,这个方法很有效,有一点不便是我不知道我应该杀死什么进程来导致退出,所以我一个接一个地尝试。无论如何,它确实会重新启动:)我发现应该终止的进程是关于在ENTRYPOINT或CMD中运行的进程的。谢谢,这也是一个很好的解决方案。但是,
sleep
应该只触发
zero exit status
exit right?是否有其他方法触发
非零退出状态
退出?您也可以执行
docker kill
,默认情况下,该操作将向容器发送
SIGKILL