我有一个码头集装箱和码头的CMD指令。在“码头重新启动”,立即开始,我不能进入码头约9-10秒。之后,码头集装箱或码头服务再次启动,我可以访问它。
问题是:是否有一种标准的方法来检查码头集装箱是否真的打开了?
当然,我可以用对我的服务的测试请求做一个循环,等待200个响应代码。但也许还有更好的解决方案?
谢谢
发布于 2015-01-21 20:56:45
Sergey,您需要使用初始化系统作为在码头进程的监督者.您可以使用发行版内置的init系统,如systemd/upstart或init.d取决于您的操作系统来检查容器状态。
理论上,您应该在您的init系统中没有-d
选项的情况下在init系统中创建独立的服务,因为-d
选项停靠器分离了一个容器,并将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/
发布于 2015-01-23 01:41:52
请记住,docker restart
默认为10秒的等待时间:
重新启动使用:码头重新启动选项容器容器..。 重新启动正在运行的容器 -t,-time=10秒,在杀死容器之前尝试停下来。一旦被杀,它就会重新启动。默认为10秒。
当我在一个码头容器中使用一些长时间运行的脚本时,它需要10秒才能完成。如果我更改命令行以使用不同的超时(如-t=4
} ),它将在4秒内返回。
如果要确定容器是否正在运行(即使包含在其中的服务尚未完全就绪),则可以:
docker ps
-这将给出所有正在运行的码头容器的列表。GET /containers/json
-这将为您提供一个包含正在运行的容器列表的json响应。https://stackoverflow.com/questions/28074923
复制相似问题