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

标签 python-3.x docker python-behave dockerpy

我正在使用docker-py通过behave帮助编写一些非常复杂的BDD测试。

我将containers.rundetach=True一起使用,因为我需要能够继续执行我的脚本。 Given步骤创建一个容器,然后when步骤使用该容器在其中进行某些操作,最后,按预期,then步骤断言正确的事情已经完成。

但是,我无法理解如何让我的代码等待Docker容器准备好接受数据/命令。目前,我在其中有一个难看的sleep(60),这显然是错误的方法。

我如何等待容器准备好?

最佳答案

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

但是,如果没有这样的事情,那么除了sleep之外,您就无法做其他事情,因为(从Docker的 Angular 来看)容器可以在其内部的主进程就绪之前就已经就绪(同样,数据库容器可以在DB之前完全启动)它内部的进程已准备好接受连接,而Docker对此无能为力。

一种可能的方法是为您正在等待的容器定义一个新的ENTRYPOINT,从而将文件放置在测试可以查找的位置。如果文件存在,则测试可以开始,否则为sleep(1)并再次查看。 entrypoint.sh的示例(未测试):

#!/bin/sh

set -e

# run the process you need here

touch /tmp/i-am-ready

exec "$@"

然后,您的测试可以直接在容器中检查此文件,也可以将其作为卷安装在某个位置。您还必须确保touch之后还有一个附加的进程,否则您的容器可能会是exit 0

关于python-3.x - 等待分离的容器运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56336878/

相关文章:

python - 在python中使用相同签名的方法重载

docker - 如何获取容器内的docker系统ID?

bdd - 如何跳过 Beeve python BDD 框架中的测试?

python - 从 python 而不是命令行运行 python behave

python - 无法在 MacOS Catalina 中的 Python 3.7(Anaconda) 中导入 Camelot

python - 在 pandas 中定期获取每月的第 n 个工作日

Python 3 - Zip 是 pandas 数据框中的迭代器

python - 有没有一种简单的方法可以将目录的特定部分复制到 Dockerfile 中?

docker - Flocker数据迁移

python - 有没有一种简单的方法可以将步骤定义为给定和何时