如何检查 Docker 的重启策略是否有效
How to check if the restart policy works of Docker
从Docker document,可以设置一个restart policy
参数。
如何在容器退出时验证容器确实重新启动。如何手动触发容器退出,并观察容器是否重启?
我的环境是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 秒。它会ps 重新启动。您可以从以下位置获取该信息:
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_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 秒后它重新启动,再次创建 window
在 运行 容器之后你可以检查它的策略,重启计数和上次启动时间:
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>
您还可以重新启动 docker 服务以查看它是否在启动时启动容器。在 Ubuntu 下,例如
sudo service docker restart
另一种选择:
通过docker ps
获取要杀死的容器的容器ID。
然后ps -efa | grep <Container ID>
获取进程ID。
然后sudo kill -9 <Process ID>
.
从Docker document,可以设置一个restart policy
参数。
如何在容器退出时验证容器确实重新启动。如何手动触发容器退出,并观察容器是否重启?
我的环境是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 秒。它会ps 重新启动。您可以从以下位置获取该信息:
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_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 秒后它重新启动,再次创建 window
在 运行 容器之后你可以检查它的策略,重启计数和上次启动时间:
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>
您还可以重新启动 docker 服务以查看它是否在启动时启动容器。在 Ubuntu 下,例如
sudo service docker restart
另一种选择:
通过
docker ps
获取要杀死的容器的容器ID。然后
ps -efa | grep <Container ID>
获取进程ID。然后
sudo kill -9 <Process ID>
.