How can I access Docker set Environment Variables From a Cron Job

后端 未结 8 1662
野性不改
野性不改 2021-01-30 20:24

I\'ve recently tried running a cron job from within a linked docker container and run into an issue. My main docker container is linked to a postgres container and its port numb

8条回答
  •  不思量自难忘°
    2021-01-30 20:37

    I ran into this same problem. I have a docker container that runs cron to execute some shell scripts periodically. I too had a hard time finding out why my scripts would run fine when I manually executed them inside the container. I tried all the tricks of creating a shell script that would run first to set the environment, but they never worked for me (most likely I did something wrong). But I continued looking and found this and it does work.

    1. Setup a start or entry point shell script for your cron container
    2. Make this the first line to execute printenv | grep -v "no_proxy" >> /etc/environment

    The trick here is the /etc/environment file. When the container is built that file is empty, I think on purpose. I found a reference to this file in the man pages for cron(8). After looking at all the versions of cron they all elude to an /etc/? file that you can use to feed environment variables to child processes.

    Also, note that I created my docker container to run cron in the foreground, cron -f. This helped me avoid other tricks with tail running to keep the container up.

    Here is my entrypoint.sh file for reference and my container is a debian:jessie base image.

    printenv | grep -v "no_proxy" >> /etc/environment
    
    cron -f
    

    Also, this trick worked even with environment variables that are set during, docker run commands.

提交回复
热议问题