等待分离容器 运行
Wait for detached container to be running
我正在使用 docker-py to help write some quite complex BDD tests via behave。
我正在使用 containers.run
和 detach=True
,因为我需要能够继续我的脚本。 Given
步骤创建了一个容器,然后 when
步骤使用它在其中执行某些操作,最后正如预期的那样,then
步骤断言已完成正确的事情。
但是,我无法理解如何让我的代码等待 Docker 容器准备好接受 data/commands。目前,我有一个丑陋的 sleep(60)
,这显然是 错误的做法 。
如何等待容器准备好?
如果您正在等待的容器运行的服务可以清楚地将其状态传达给外界(例如,拒绝或接受连接的数据库),那么您可以轻松构建一些 try-catch 功能在您的测试中检查容器是否在测试开始前就绪。
然而,如果没有这样的东西,除了 sleep
,你不能做太多,因为(从 Docker 的角度来看)容器可以在其内部的主进程之前准备好准备就绪(同样,数据库容器可以在其中的数据库进程准备好接受连接之前完全启动,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
.
我正在使用 docker-py to help write some quite complex BDD tests via behave。
我正在使用 containers.run
和 detach=True
,因为我需要能够继续我的脚本。 Given
步骤创建了一个容器,然后 when
步骤使用它在其中执行某些操作,最后正如预期的那样,then
步骤断言已完成正确的事情。
但是,我无法理解如何让我的代码等待 Docker 容器准备好接受 data/commands。目前,我有一个丑陋的 sleep(60)
,这显然是 错误的做法 。
如何等待容器准备好?
如果您正在等待的容器运行的服务可以清楚地将其状态传达给外界(例如,拒绝或接受连接的数据库),那么您可以轻松构建一些 try-catch 功能在您的测试中检查容器是否在测试开始前就绪。
然而,如果没有这样的东西,除了 sleep
,你不能做太多,因为(从 Docker 的角度来看)容器可以在其内部的主进程之前准备好准备就绪(同样,数据库容器可以在其中的数据库进程准备好接受连接之前完全启动,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
.