In my free time, amongst other things, I like to play a round of Factorio.
In a nutshell Factorio is a game centered around automating production.

I think this Video explains the concept of the game quite well.

This game can be played by multiple players on a server.
There is a nice Docker Container for Factorio that allows you to have your own server up and running in no time.


Unfortunately there is no easy way to allow other players uploading maps to the server.
So I came up with a solution using nextcloud.

What you need:

  • A Docker Host that is running the dtandersen/factorio container
  • A resource (like a nextcloud) that you can check a file from, download a savegame from and share with others

The Idea:

  • The Docker Host is running a script (see below) every minute

Add the following line to the /etc/crontab and use the path were you dropped that script.

* * * * * root /path/to/

  • This script checks the content of a textfile at a resource of your choice using ssh
  • In case the text file does not contain a 1, nothing happens
  • In case the file does contain a 1 the script will be run

The script:

  • Stops docker
  • Moves the currently running map in a backup directory
  • Then deletes the current savegame
  • Connects to a ressource, downloads *.zip and places them in the savegame directory
  • Changes the owner of the savegame so the docker container can work with it
  • Restarts docker
  • Writes into a logfile at the ressource


  • The savegame directorz, mounted by the container is  /opt/factorio/save

You will have to change the script by hand, and generate the ssh keys.
It is not pretty but it does work.




factorio=$(ssh root@IP ‘cat path/to/Checkme.txt’)

if (echo $factorio | grep -q “1”)
service docker stop
cp /opt/factorio/saves/ /opt/factorio/backup_save/
rm -rf /opt/factorio/saves/*
scp root@IP:/path/to/savegame/\*.zip /opt/factorio/saves/.
chown -R 845:845 /opt/factorio/saves

service docker start

ssh root@ ‘echo “0” > path/to/Checkme.txt’
ssh root@ ‘echo “Server rebooted at $(date +\%d-\%m-\%Y-\%H-\%M-\%S)” >> path/to/RebootLog.txt’