Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible change date in docker container?

Tags:

docker

tomcat

I have a container with a running program inside tomcat. I need to change date only in this container and test my program behaviour. I have time sensitive logic, and sometimes need to see what happens in a few days or months later. Is it possible in docker? I read that if I change date in container, date will get changed on the host system. But it is a bad idea for me. I need to have a few instances of this application on one server and have possibilities of setting up different time for each instance.

But when I try to change date inside the container I get the error:

sudo date 04101812 date: cannot set date: Operation not permitted Fri Apr 10 18:12:00 UTC 2015 
like image 451
Aleksey Mitskevich Avatar asked Apr 10 '15 08:04

Aleksey Mitskevich


1 Answers

It is very much possible to dynamically change the time in a Docker container, without effecting the host OS.

The solution is to fake it. This lib intercepts all system call programs use to retrieve the current time and date.

The implementation is easy. Add functionality to your Dockerfile as appropriate:

WORKDIR / RUN git clone https://github.com/wolfcw/libfaketime.git WORKDIR /libfaketime/src RUN make install 

Remember to set the environment variables LD_PRELOAD before you run the application you want the faked time applied to.

Example:

CMD ["/bin/sh", "-c", "LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME_NO_CACHE=1 python /srv/intercept/manage.py runserver 0.0.0.0:3000] 

You can now dynamically change the servers time:

Example:

def set_time(request):     import os     import datetime     print(datetime.datetime.today())     os.environ["FAKETIME"] = "2020-01-01"  #  string must be "YYYY-MM-DD hh:mm:ss" or "+15d"     print(datetime.today()) 
like image 74
Vingtoft Avatar answered Sep 20 '22 01:09

Vingtoft