Python 3.x 等待分离的容器运行

Python 3.x 等待分离的容器运行,python-3.x,docker,python-behave,dockerpy,Python 3.x,Docker,Python Behave,Dockerpy,我正在通过帮助编写一些非常复杂的BDD测试 我正在使用容器。使用detach=True运行,因为我需要能够继续我的脚本。一个给定的步骤创建了一个容器,当步骤在容器中执行某项操作时,该容器会被使用,最后,正如预期的那样,然后步骤会断言所做的操作是正确的 但是,我无法理解如何让代码等待Docker容器准备好接受数据/命令。目前,我有一个丑陋的睡眠(60),这显然是错误的做法 如何等待容器准备就绪?如果您等待的容器运行的服务可以清楚地将其状态传达给外部世界(例如,拒绝或接受连接的数据库),然后,您可以

我正在通过帮助编写一些非常复杂的BDD测试

我正在使用
容器。使用
detach=True
运行
,因为我需要能够继续我的脚本。一个
给定的
步骤创建了一个容器,当
步骤在容器中执行某项操作时,该容器会被
使用,最后,正如预期的那样,
然后
步骤会断言所做的操作是正确的

但是,我无法理解如何让代码等待Docker容器准备好接受数据/命令。目前,我有一个丑陋的
睡眠(60)
,这显然是错误的做法


如何等待容器准备就绪?

如果您等待的容器运行的服务可以清楚地将其状态传达给外部世界(例如,拒绝或接受连接的数据库),然后,您可以在测试中轻松构建一些try-catch功能,以在测试开始之前检查容器是否准备就绪

但是,如果没有这样的事情,那么除了
睡眠
,您就不能做很多事情,因为(从Docker的角度来看)容器可以在其内部的主进程准备好之前准备好(同样,数据库容器可以在其内部的DB进程准备好接受连接之前完全启动,Docker对此无能为力)

一种可能的方法是为您正在等待的容器定义一个新的
入口点
,将文件放在您的测试可以查找的地方。如果文件在那里,测试可以开始,否则
sleep(1)
然后再次查看。
entrypoint.sh
示例(未测试):


然后,您的测试可以直接在容器中检查该文件,或者将其作为卷装载到某个位置。您还必须确保在触摸
后仍有附加的进程,否则您的容器可能会
退出0

确认。这是一个很好的通用解决方案。我最终使用了其他东西(即等待SSH可用),但这是我自己的奇怪设置,因此我不推荐其他人使用它。提供的解决方案是否回答了您的问题?如果是,您可以关闭它。否则,我们可以提供进一步的帮助assistance@bellackn我已经这样做了。谢谢你提醒我。
#!/bin/sh

set -e

# run the process you need here

touch /tmp/i-am-ready

exec "$@"