'Delay Docker Container RUN until tox environment is built

I am trying to find a way to delay the docker container to be up until the task in ENTRYPOINT is completed. To explain it further, I have a docker file which has the entry point

ENTRYPOINT ["bash", "-c", "tox", "-e", "docker-server"]

When I run the container using

Docker run -d -t -p 127.0.0.1:8882:8882 datawarehouse

it immediately makes the container up where as tox command is still building the environment. The problem with this is that, if I trigger a cron job or run a python code immediately it will fail because the tox environment is still in the build phase. I want to avoid running anything until the ENTRYPOINT task is complete, can this be achieved in the docker file or in the run command?



Solution 1:[1]

yes , in the docker-compose file you can set it to sleep or you can define dependencies.

https://docs.docker.com/compose/startup-order/

https://8thlight.com/blog/dariusz-pasciak/2016/10/17/docker-compose-wait-for-dependencies.html

Solution 2:[2]

I dont have an elegant solution, but here is what I did.

RUN <your dependencies>
# Then add a second RUN command with a sleep at the beginning:
RUN sleep 400 && gcloud dataproc jobs submit xxxxxx

Each RUN command will run at a separate container layer on a clean slate, hence the sleep && the actual entry-point command goes together as one logical command. But as you can see this was Hard coded, change the sleep duration accordingly.

Solution 3:[3]

I think that this in an incorrect approach. When a container "start" we need to avoid install dependencies, libraries, etc. The build image process is the moment to do that: We ensure that an image "AAAA" always will "works" if we install any dependencies, build any code in the "build" images process. When a container run, is only for do that, just "run".

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ankur Srivastava
Solution 2 sumon c
Solution 3 Titi