如何检查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中实现这个机制:
- 在
/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
- 重新加载系统configuration
systemctl daemon-reload
- 试试通过input
systemctl start something.service
来运行你的容器,或者restart
而不是启动。 - 你可以检查服务状态
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秒钟后返回。
如果你想确定一个容器是否正在运行(即使你的服务还没有准备好),你可以:
- 运行
docker ps
– 它会给你一个所有正在运行的docker容器的列表 - 使用Docker Remote API命令
GET /containers/json
– 这将为您提供一个带有运行容器列表的json响应。
https://docs.docker.com/reference/api/docker_remote_api_v1.16/
- 在docker中,存储驱动程序和备份文件系统有什么不同?
- 在执行docker exec命令时,执行python脚本时挂起
- 如何使用docker为scylladb设置机架和数据中心名称?
- Gradle依赖于自己的任务。 如何在liquibase和docker-compose之后运行Inttesting
- Docker Compose:声明为外部的卷,但无法find
- GitLab CI Runner,如何在服务容器中使用卷或坐标
- 无法从Docker容器访问WSO2 Stream Processor Studio服务
- Kubernetes中的垃圾收集会将etcd恢复到以前的备份
- 即使退出命令后,Docker容器也显示正在运行