docker - Docker容器依赖性

标签 docker docker-entrypoint

我的容器A取决于容器B下载的数据。

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

是否有一种方法可以在容器A的入口点中指定条件,该条件必须等待容器B完成下载?

最佳答案

这基本上取决于您的执行环境。

Kubernetes :如果是Kubernetes,那么您很幸运,您所描述的基本上是init container。 Kubernetes中的Pod可以有多个容器,并且在启动主要应用程序容器之前,初始化容器要运行完毕。这是docs最新版本的状态:

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 Compose :您不太幸运。如您的问题所述,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必须出现在两个容器中的同一位置)。

关于docker - Docker容器依赖性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56636303/

相关文章:

java - 访问入口点中的 dockerfile ENV 变量

docker - 如何在Linux上运行Visual Studio 2019生成的Dockered ASP.net核心应用程序? SSL配置问题

php - 如何修复Page Insights利用Google Cloud,Docker,Nginx和Laravel进行缓存?

docker - 无法连接到应用程序中的 redis 容器,但可以 ping 到该容器

node.js - TypeError : (0 , _schemaUtils.default) 不是函数

Docker入口点权限被拒绝

docker - Docker for Windows 中的 Minikube 与 Kubernetes

带有入口点的 docker-compose.yml。文件未找到

docker - 如何在ENTRYPOINT dockerfile中访问构建参数

python-3.x - 进入入口点后进入容器提示的命令