Docker container with Factorio server and NestJS HTTP API for RCON management.
Build the Docker image with default Factorio version (2.0.55):
docker build --platform linux/amd64 -t jarnotmichal/factorio-with-http-controls:2.0.55-3 .Build with specific Factorio version:
# Build with Factorio 1.1.110
docker build --platform linux/amd64 --build-arg FACTORIO_VERSION=1.1.110 -t jarnotmichal/factorio-with-http-controls:1.1.110-3 .
# Build with Factorio 1.1.109
docker build --platform linux/amd64 --build-arg FACTORIO_VERSION=1.1.109 -t jarnotmichal/factorio-with-http-controls:1.1.109-3 .Note: The --platform linux/amd64 flag ensures the image is built for x86_64 architecture, making it compatible with most cloud platforms (GCP, AWS, Azure) even when building on Apple Silicon Macs.
Note: Check factoriotools/factorio for all available versions.
Copy the example environment file and customize:
cp .env.example .envRun the all-in-one container (includes both Factorio server and HTTP API):
docker run -d \
--name factorio-server \
--env-file .env \
-p 34197:34197/udp \
-p 8080:8080 \
-v factorio-saves:/data/factorio \
jarnotmichal/factorio-with-http-controls:2.0.55-3Direct IP Connection:
- In Factorio, go to "Play" → "Multiplayer"
- Click "Connect to address"
- Enter your server's IP address and port:
your-server-ip:34197for example127.0.0.1:34197 - The server will not appear in the public server browser
Server Configuration:
- Game Port:
34197/udp(for Factorio client connections) - HTTP API Port:
8080/tcp(for RCON management) - RCON Port:
27015/tcp(internal only)
The container runs both services automatically. No manual Factorio server setup required.
Get Server Time:
curl http://localhost:8080/factorio/timeGet Server Status (Player List):
curl http://localhost:8080/factorio/statusSlow Down Time:
curl -X POST http://localhost:8080/factorio/speed/slowSet Normal Speed:
curl -X POST http://localhost:8080/factorio/speed/normalSpeed Up Time:
curl -X POST http://localhost:8080/factorio/speed/fastPause Game:
curl -X POST http://localhost:8080/factorio/pauseUnpause Game:
curl -X POST http://localhost:8080/factorio/unpauseTrigger Save:
curl -X POST http://localhost:8080/factorio/saveList Save Files:
curl http://localhost:8080/factorio/savesLoad Specific Save:
curl -X POST http://localhost:8080/factorio/load/default
curl -X POST http://localhost:8080/factorio/load/_autosave4Load Local Save File:
curl -X POST http://localhost:8080/factorio/upload-save \
-F "saveFile=@/Users/michaljarnot/Library/Application Support/factorio/saves/example-to-load-on-server.zip" \
-F "autoLoad=true"The --platform linux/amd64 flag ensures your images work on x86_64 cloud servers (GCP, AWS, Azure) regardless of your build machine architecture.
1. Build and Tag for Docker Hub:
# Build with specific Factorio version
docker build --platform linux/amd64 --build-arg FACTORIO_VERSION=2.0.55 -t jarnotmichal/factorio-with-http-controls:2.0.55-3 .
# Build latest tag (uses default version 2.0.55)
docker build --platform linux/amd64 -t jarnotmichal/factorio-with-http-controls:latest .2. Push to Docker Hub:
# Push latest tag
docker push jarnotmichal/factorio-with-http-controls:latest
# Push specific version
docker push jarnotmichal/factorio-with-http-controls:2.0.55-33. Once published, others can use your image directly:
# Pull and run from Docker Hub (from project directory with .env file)
docker run -d \
--name factorio-server \
--env-file .env \
-p 34197:34197/udp \
-p 8080:8080 \
-v factorio-saves:/data/factorio \
jarnotmichal/factorio-with-http-controls:2.0.55-3