我试图找到一种方法来延迟docker容器,直到ENTRYPOINT中的任务完成。为了进一步解释,我有一个具有入口点
的docker文件ENTRYPOINT ["bash", "-c", "tox", "-e", "docker-server"]
当我使用
运行容器时Docker run -d -t -p 127.0.0.1:8882:8882 datawarehouse
它立即使容器处于tox命令仍在构建环境的位置。这样做的问题是,如果我触发cron作业或立即运行python代码,它将失败,因为tox环境仍处于构建阶段。我想避免在ENTRYPOINT任务完成之前运行任何东西,这可以在docker文件或run命令中实现吗?
答案 0 :(得分:2)
是的,在docker-compose文件中,您可以将其设置为休眠状态,或者您可以定义依赖关系。
https://docs.docker.com/compose/startup-order/
https://8thlight.com/blog/dariusz-pasciak/2016/10/17/docker-compose-wait-for-dependencies.html
答案 1 :(得分:0)
我没有一个优雅的解决方案,但这就是我所做的。
RUN <your dependencies>
# Then add a second RUN command with a sleep at the beginning:
RUN sleep 400 && gcloud dataproc jobs submit xxxxxx
每个RUN命令将在干净的板上的单独容器层上运行,因此sleep &&实际入口点命令作为一个逻辑命令一起运行。 但是正如您所看到的,这是硬编码的,请相应地更改睡眠时间。