Docker 容器依赖

Docker container dependency

我的容器 A 依赖于容器 B 下载的数据。

为了实现这种依赖性,我尝试在 docker-compose 中使用 depends_on,虽然它确保容器 B 在 A 之前启动,但下载可能仍在进行中。

有没有办法在容器A的入口点指定一个条件,它必须等到容器B下载完成?

我建议更改 containerA 入口点。

由于两个容器都使用相同的数据,它们将指向一些公共目录或挂载点。

containerB 完成下载操作后。创建一些事件来标记此过程的完成,例如触摸文件 /path/xyz.txt

在 containerA 入口点脚本中,它将继续检查文件 /path/xyz.txt 是否存在,如果存在则继续进行。

这个主要看你的执行环境是什么。

Kubernetes:如果是Kubernetes那你就走运了,你描述的基本都是init container。 Kubernetes 中的一个 pod 可以有多个容器和 init 容器 运行 在主应用程序容器启动之前完成。这是最新版本的文档状态:

They run to completion before any app Containers start, whereas app Containers run in parallel, so Init Containers provide an easy way to block or delay the startup of app Containers until some set of preconditions are met.

Docker撰写:你没那么幸运。正如您的问题所述,depends_on 只是意味着一个容器在另一个容器之前 启动 ,而不是它在另一个容器启动之前 完成 。如果你想实现这一点,那么你需要把逻辑放在自己身上。

在这种情况下,我会让下载容器下载您想要的任何内容,然后写入某个已知位置。

例如在下载容器的入口点脚本中:

#!/bin/bash
curl -o /path/to/my/download http://example.com/download/path
touch /some/shared/file

在主容器的入口点内:

#!/bin/bash
while [ ! -f /some/shared/file ]; do
# endless loop
done

# now perform your normal start

这假设 /path/to/my/download/some/shared/file 都可以从两个容器访问,无论是通过卷装载还是共享数据容器(特别是,/some/shared/file 必须出现在两个容器中的相同位置)。