如何检查docker容器重新启动和可访问?

我有一个JETTY CMD指令的docker容器。 在“docker重启”之后,我立刻就无法访问JETTY约9-10秒。 在此之后docker集装箱或docker服务再次UP,我可以访问它。

问题是:有没有一个标准的方法来检查docker集装箱是否真的起来?

当然,我可以循环testing请求到我的服务,并等待200响应代码。 但也许有一个更美丽的解决scheme?

谢谢

谢尔盖,你需要使用初始化系统作为你的Docker进程的主pipe。 你可以使用distro-built初始化系统,如systemd / upstart或init.d,取决于你的操作系统来检查一个容器的状态。

理论上你应该在你的init系统上为每个docker run命令创build独立的服务,而不需要-d选项,因为使用-d选项docker分离了一个容器并且返回0退出状态到init系统。 结果init系统失去了对目标进程的控制。

例如,在Systemd中实现这个机制:

  1. /etc/systemd/system创buildsomething.service文件

并键入它像这样:

 [Unit] Description=Simple Blog Rails Docker Container Service After=docker.service Requires=docker.service [Service] Restart=on-failure ExecStartPre=-/usr/bin/docker kill simple-blog-rails-container ExecStartPre=-/usr/bin/docker rm simple-blog-rails-container ExecStart=/usr/bin/docker run simple-blog-rails ExecStop=/usr/bin/docker stop simple-blog-rails-container [Install] WantedBy=multi-user.target 
  1. 重新加载系统configurationsystemctl daemon-reload
  2. 试试通过inputsystemctl start something.service来运行你的容器,或者restart而不是启动。
  3. 你可以检查服务状态systemctl status something.service

有关使用systemd和docker的更多信息,请阅读以下CoreOS手册: https ://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/

请记住, docker restart默认为10秒的等待时间:

重启用法:docker重启[OPTIONS] CONTAINER [CONTAINER …]

重新启动正在运行的容器

-t,–time = 10在杀死容器之前尝试停止的秒数。 一旦死亡,然后将重新启动。 默认是10秒。

当我在Docker容器中使用一些长时间运行的脚本进行尝试时,需要10秒钟才能完成。 如果我将命令行更改为使用其他超时(例如-t=4 ),则会在4秒钟后返回。

如果你想确定一个容器是否正在运行(即使你的服务还没有准备好),你可以:

  1. 运行docker ps – 它会给你一个所有正在运行的docker容器的列表
  2. 使用Docker Remote API命令GET /containers/json – 这将为您提供一个带有运行容器列表的json响应。

https://docs.docker.com/reference/api/docker_remote_api_v1.16/

https://docs.docker.com/reference/commandline/cli/#ps