Search code examples
dockercroncontainersshdockerfile

Dockerfile entrypoint


I'm trying to customize the docker image presented in the following repository https://github.com/erkules/codership-images

I created a cron job in the Dockerfile and tried to run it with CMD, knowing the Dockerfile for the erkules image has an ENTRYPOINT ["/entrypoint.sh"]. It didn't work.

I tried to create a separate cron-entrypoint.sh and add it into the dockerfile, then test something like this ENTRYPOINT ["/entrypoint.sh", "/cron-entrypoint.sh"]. But also get an error.

I tried to add the cron job to the entrypoint.sh of erkules image, when I put it at the beginning, then the container runs the cron job but doesn't execute the rest of the entrypoint.sh. And when I put the cron script at the end of the entrypoint.sh, the cron job doesn't run but anything above in the entrypoint.sh gets executed.

How can I be able to run what's in the the entrypoint.sh of erkules image and my cron job at the same time through the Dockerfile?


Solution

  • You need to send the cron command to background, so either use & or remove the -f (-f means: Stay in foreground mode, don't daemonize.)

    So, in your entrypoint.sh:

    #!/bin/bash
    cron -f &
    (
     # the other commands here
    )
    

    Edit: I am totally agree with @BMitch regarding the way that you should handle multiple processes, but inside the same container, which is something not so recommended.

    See examples here: https://docs.docker.com/engine/admin/multi-service_container/