我有一个带有JETTY CMD指令的docker容器。 在" docker restart"之后,立即进行,我无法访问JETTY约9-10秒。之后,docker container或jetty服务再次启动,我可以访问它。
问题是:有没有一种标准方法来检查docker容器是否正常运行?
当然,我可以对我的服务进行测试请求循环,然后等待200个响应代码。但也许有一个更美丽的解决方案?
由于
答案 0 :(得分:3)
谢尔盖,你需要使用初始化系统作为你的入门者进程的主管。您可以使用发行版内置的init系统,如systemd / upstart或init.d,取决于您的操作系统,以检查容器状态。
理论上,您应该在每个docker run
命令的init系统中创建独立服务而不使用-d
选项,因为使用-d
选项docker分离了一个容器并将0退出状态返回到init系统。结果,init系统失去了对目标进程的控制。
例如,在Systemd中实现这种机制:
something.service
/etc/systemd/system
个文件
醇>
输入类似的内容:
[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
systemctl daemon-reload
systemctl start something.service
或restart
而不是开始,即可尝试运行您的容器。systemctl status something.service
有关使用systemd和docker的更多信息,请阅读此CoreOS手册:https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/
答案 1 :(得分:0)
请记住docker restart
默认等待时间为10秒:
重新启动用法:docker restart [OPTIONS] CONTAINER [CONTAINER ...]
重新启动正在运行的容器
-t, - time = 10之前尝试停止的秒数 杀死容器。一旦被杀死,它将重新启动。默认 是10秒。
当我在Docker容器中尝试使用一些长时间运行的脚本时,它需要10秒才能完成。如果我更改命令行以使用不同的超时(如-t=4
},则会在4秒后返回。
如果您想确定容器是否正在运行(即使其中包含的服务尚未准备就绪),您可以:
docker ps
- 这将为您提供所有正在运行的docker的列表
容器GET /containers/json
- 这样就可以了
给你一个带有运行容器列表的json响应。https://docs.docker.com/reference/api/docker_remote_api_v1.16/