During my usual backup routine, I wanted to gather how a Docker container I started a while ago was run, especially the docker run
command; this is required in case I need to re-run that container and I want to preserve the options (e.g. env variables, ports, etc.).
Let’s make an example. I run a mysql docker container with:
docker run -m 100M --name testbed-mysql --restart=always -e MYSQL_ROOT_PASSWORD=foo -e MYSQL_DATABASE=bar -e MYSQLPASSWORD=foo -e MYSQL_USER=foo -v /tmp/etc:/etc/mysql/conf.d -v /tmp/mysql:/var/lib/mysql -p 127.0.0.1:7308:3306 -d mysql
If I just list running containers, there is no way to display these options:
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[...]
a32bdcbb36c7 mysql:latest "docker-entrypoint..." 2 days ago Up 2 days 127.0.0.1:7308->3306/tcp testbed-mysql
[...]
Display this options is possible with docker inspect
and some sorcery. Luckily, that sorcery is already packaged for you in two projects (alternatives):
Both of them work really well in reverse engineering the options from the running containers, as you can see:
% runlike testbed-mysql
docker run --name=testbed-mysql --hostname=a73900fe9af6 --env="MYSQL_ROOT_PASSWORD=foo" --env="MYSQL_DATABASE=bar" --env="MYSQLPASSWORD=foo" --env="MYSQL_USER=foo" --env="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" --env="GOSU_VERSION=1.7" --env="MYSQL_MAJOR=5.7" --env="MYSQL_VERSION=5.7.20-1" --volume="/tmp/etc:/etc/mysql/conf.d" --volume="/tmp/mysql:/var/lib/mysql" --volume="/var/lib/mysql" -p 127.0.0.1:7308:3306 --restart=always --detach=true mysql:latest mysqld
The only option which has not been recovered is the resource constraint options I used (see -m 100M
above).