Docker exec not working inside cron! SOLVED

Em Software development by Alex Benfica

Docker is essential nowadays if you want to pack your applications and not depend on anything from the host machine. Actually, this a good practice when creating containers.

There are many ways to deploy a Docker container and one of those ways is to run the container inside a virtual machine (VM). I am doing exactly this to run some of my projects using a Ubuntu Virtual Machine hosted on Google Cloud.

But I have one need: schedule some commands from inside the container to run every single hour!

I started using the Container Optimized OS offered by Google but I could not schedule tasks on it using cron… so I decided to use a default Ubuntu VM.

Leia também

The advantage to run a container inside a VM is that you can use cron at the VM to schedule background tasks that are important to your application. You’ll simple run docker exec commands to do whatever you need to accomplish inside the container.

Cron is easy to set up, but usually is not easy to debug if you are not familiar with how it works. The cron environment is different from the one you have at the command line.

Docker exec and cron

I tried to run a command in my container putting the following line in my /etc/crontab file:

The problem with this command is that I included the -it parameter on docker exec.

The -it flags indicates that my docker exec command needs a pseudo terminal and will run in interactive mode. Cron does not attach to terminals by default.

In order to run a docker exec command from cron, DO NOT USE the -it flag and you’ll be good!

Docker exec inside cron. Crontab files.

Running docker exec from cron. Image: Samuel Lee Toepke

After the modification, the following cron command worked flawlessly!

It is very easy to run many different commands inside your container using the cron from your VM, especially in small projects!

Sobre o autor

Autor Alex Benfica

IT professional with over 20 years of experience in industry. BSc in Computational Mathematics, always learning and enthusiastic about software development and automation. Full stack developer proficient in Javascript, Node, React, Python, Docker, API design and many more!

One Response to: “Docker exec not working inside cron! SOLVED”

  • Hank Wojteczko

    Thanks só much for this post. I had forgotten about cron and the need estou leave off the -it option from docker exec. Your post reminded me of what I had forgotten. Accurate and straight estou the point.

    Reply

Leave a Reply