Repository files navigation

Satisfactory Server

ReleaseDocker PullsDocker StarsImage Size

This is a Dockerized version of the Satisfactory dedicated server.

Setup

According to the official wiki, expect to need 5GB - 10GB of RAM.

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /backups - the server will automatically backup your saves when the container first starts
  • /gamefiles - this is for the game's files. They're stored outside of the container to avoid needing to redownload 15GB+ every time you want to rebuild the container
  • /saves - this is for the game's saves. They're copied into the container on start

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Satisfactory server image like this:

docker run -d --name=satisfactory-server -h satisfactory-server -e MAXPLAYERS=4 -e PGID=1000 -e PUID=1000 -e STEAMBETA=false -v /path/to/config:/config -p 7777:7777/udp -p 15000:15000/udp -p 15777:15777/udp wolveix/satisfactory-server:latest

If you're using Docker Compose:

version: '3'services:
satisfactory-server:
container_name: 'satisfactory-server'hostname: 'satisfactory-server'image: 'wolveix/satisfactory-server:latest'ports:
- '7777:7777/udp'
- '15000:15000/udp'
- '15777:15777/udp'volumes:
- '/path/to/config:/config'environment:
- MAXPLAYERS=4
- PGID=1000
- PUID=1000
- STEAMBETA=falserestart: unless-stopped

Environment Variables

ParameterDefaultFunction
AUTOPAUSEtruepause game when no player is connected
AUTOSAVEINTERVAL300autosave interval in seconds
AUTOSAVENUM3number of rotating autosave files
AUTOSAVEONDISCONNECTtrueautosave when last player disconnects
CRASHREPORTtrueautomatic crash reporting
DEBUGfalsefor debugging the server
DISABLESEASONALEVENTSfalsedisable the FICSMAS event (you miserable bastard)
MAXPLAYERS4set the player limit for your server
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERBEACONPORT15000set the game's beacon port
SERVERGAMEPORT7777set the game's port
SERVERIP0.0.0.0set the game's ip (usually not needed)
SERVERQUERYPORT15777set the game's query port
SKIPUPDATEfalseavoid updating the game on container start/restart
STEAMBETAfalseset experimental game version

Loading Your Save

If you want to upload your own save to the server, you'll need to do the following workaround as there's no UI for this in-game just yet.

Per the instructions here, you'll want to place your savefile in the /config/saves directory. Before the next step, you'll need to find out your session name. You can find the session name from either the Load Menu, or through a save editor

Once you've done this, connect to the server in-game. From the Server Settings tab, insert your session name into the appropriate field. You may need to copy & paste the name in and immediately press ENTER, as the UI seems to constantly refresh.

Experimental Branch

If you want to run a server for the Experimental version of the game, set the STEAMBETA environment variable to true.

How to Improve the Multiplayer Experience

The Satisfactory Wiki recommends a few config tweaks to really get the best out of multiplayer. These changes are already applied to the server, but they need to be applied to your local config too:

  • Press WIN + R
  • Enter %localappdata%/FactoryGame/Saved/Config/WindowsNoEditor
  • Copy the config data from the wiki into the respective files
  • Right-click each of the 3 config files (Engine.ini, Game.ini, Scalability.ini)
  • Go to Properties > tick Read-only under the attributes

Known Issues

  • The container is run as root. This is pretty common for Docker images, but is bad practice for security reasons. This change was made to address permissions issues
  • The server log will show various errors; most of which can be safely ignored. As long as the container continues to run and your log looks similar to the example log, the server should be functioning just fine: example log

About

A Dockerized version of the Satisfactory dedicated server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Satisfactory Server

ReleaseDocker PullsDocker StarsImage Size

This is a Dockerized version of the Satisfactory dedicated server.

Setup

According to the official wiki, expect to need 5GB - 10GB of RAM.

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /backups - the server will automatically backup your saves when the container first starts
  • /gamefiles - this is for the game's files. They're stored outside of the container to avoid needing to redownload 15GB+ every time you want to rebuild the container
  • /saves - this is for the game's saves. They're copied into the container on start

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Satisfactory server image like this:

docker run -d --name=satisfactory-server -h satisfactory-server -e MAXPLAYERS=4 -e PGID=1000 -e PUID=1000 -e STEAMBETA=false -v /path/to/config:/config -p 7777:7777/udp -p 15000:15000/udp -p 15777:15777/udp wolveix/satisfactory-server:latest

If you're using Docker Compose:

version: '3'services:
satisfactory-server:
container_name: 'satisfactory-server'hostname: 'satisfactory-server'image: 'wolveix/satisfactory-server:latest'ports:
- '7777:7777/udp'
- '15000:15000/udp'
- '15777:15777/udp'volumes:
- '/path/to/config:/config'environment:
- MAXPLAYERS=4
- PGID=1000
- PUID=1000
- STEAMBETA=falserestart: unless-stopped

Environment Variables

ParameterDefaultFunction
AUTOPAUSEtruepause game when no player is connected
AUTOSAVEINTERVAL300autosave interval in seconds
AUTOSAVENUM3number of rotating autosave files
AUTOSAVEONDISCONNECTtrueautosave when last player disconnects
CRASHREPORTtrueautomatic crash reporting
DEBUGfalsefor debugging the server
DISABLESEASONALEVENTSfalsedisable the FICSMAS event (you miserable bastard)
MAXPLAYERS4set the player limit for your server
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERBEACONPORT15000set the game's beacon port
SERVERGAMEPORT7777set the game's port
SERVERIP0.0.0.0set the game's ip (usually not needed)
SERVERQUERYPORT15777set the game's query port
SKIPUPDATEfalseavoid updating the game on container start/restart
STEAMBETAfalseset experimental game version

Loading Your Save

If you want to upload your own save to the server, you'll need to do the following workaround as there's no UI for this in-game just yet.

Per the instructions here, you'll want to place your savefile in the /config/saves directory. Before the next step, you'll need to find out your session name. You can find the session name from either the Load Menu, or through a save editor

Once you've done this, connect to the server in-game. From the Server Settings tab, insert your session name into the appropriate field. You may need to copy & paste the name in and immediately press ENTER, as the UI seems to constantly refresh.

Experimental Branch

If you want to run a server for the Experimental version of the game, set the STEAMBETA environment variable to true.

How to Improve the Multiplayer Experience

The Satisfactory Wiki recommends a few config tweaks to really get the best out of multiplayer. These changes are already applied to the server, but they need to be applied to your local config too:

  • Press WIN + R
  • Enter %localappdata%/FactoryGame/Saved/Config/WindowsNoEditor
  • Copy the config data from the wiki into the respective files
  • Right-click each of the 3 config files (Engine.ini, Game.ini, Scalability.ini)
  • Go to Properties > tick Read-only under the attributes

Known Issues

  • The container is run as root. This is pretty common for Docker images, but is bad practice for security reasons. This change was made to address permissions issues
  • The server log will show various errors; most of which can be safely ignored. As long as the container continues to run and your log looks similar to the example log, the server should be functioning just fine: example log

About

A Dockerized version of the Satisfactory dedicated server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Satisfactory Server

ReleaseDocker PullsDocker StarsImage Size

This is a Dockerized version of the Satisfactory dedicated server.

Setup

According to the official wiki, expect to need 5GB - 10GB of RAM.

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /backups - the server will automatically backup your saves when the container first starts
  • /gamefiles - this is for the game's files. They're stored outside of the container to avoid needing to redownload 15GB+ every time you want to rebuild the container
  • /saves - this is for the game's saves. They're copied into the container on start

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Satisfactory server image like this:

docker run -d --name=satisfactory-server -h satisfactory-server -e MAXPLAYERS=4 -e PGID=1000 -e PUID=1000 -e STEAMBETA=false -v /path/to/config:/config -p 7777:7777/udp -p 15000:15000/udp -p 15777:15777/udp wolveix/satisfactory-server:latest

If you're using Docker Compose:

version: '3'services:
satisfactory-server:
container_name: 'satisfactory-server'hostname: 'satisfactory-server'image: 'wolveix/satisfactory-server:latest'ports:
- '7777:7777/udp'
- '15000:15000/udp'
- '15777:15777/udp'volumes:
- '/path/to/config:/config'environment:
- MAXPLAYERS=4
- PGID=1000
- PUID=1000
- STEAMBETA=falserestart: unless-stopped

Environment Variables

ParameterDefaultFunction
AUTOPAUSEtruepause game when no player is connected
AUTOSAVEINTERVAL300autosave interval in seconds
AUTOSAVENUM3number of rotating autosave files
AUTOSAVEONDISCONNECTtrueautosave when last player disconnects
CRASHREPORTtrueautomatic crash reporting
DEBUGfalsefor debugging the server
DISABLESEASONALEVENTSfalsedisable the FICSMAS event (you miserable bastard)
MAXPLAYERS4set the player limit for your server
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERBEACONPORT15000set the game's beacon port
SERVERGAMEPORT7777set the game's port
SERVERIP0.0.0.0set the game's ip (usually not needed)
SERVERQUERYPORT15777set the game's query port
SKIPUPDATEfalseavoid updating the game on container start/restart
STEAMBETAfalseset experimental game version

Loading Your Save

If you want to upload your own save to the server, you'll need to do the following workaround as there's no UI for this in-game just yet.

Per the instructions here, you'll want to place your savefile in the /config/saves directory. Before the next step, you'll need to find out your session name. You can find the session name from either the Load Menu, or through a save editor

Once you've done this, connect to the server in-game. From the Server Settings tab, insert your session name into the appropriate field. You may need to copy & paste the name in and immediately press ENTER, as the UI seems to constantly refresh.

Experimental Branch

If you want to run a server for the Experimental version of the game, set the STEAMBETA environment variable to true.

How to Improve the Multiplayer Experience

The Satisfactory Wiki recommends a few config tweaks to really get the best out of multiplayer. These changes are already applied to the server, but they need to be applied to your local config too:

  • Press WIN + R
  • Enter %localappdata%/FactoryGame/Saved/Config/WindowsNoEditor
  • Copy the config data from the wiki into the respective files
  • Right-click each of the 3 config files (Engine.ini, Game.ini, Scalability.ini)
  • Go to Properties > tick Read-only under the attributes

Known Issues

  • The container is run as root. This is pretty common for Docker images, but is bad practice for security reasons. This change was made to address permissions issues
  • The server log will show various errors; most of which can be safely ignored. As long as the container continues to run and your log looks similar to the example log, the server should be functioning just fine: example log

About

A Dockerized version of the Satisfactory dedicated server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Satisfactory Server

ReleaseDocker PullsDocker StarsImage Size

This is a Dockerized version of the Satisfactory dedicated server.

Setup

According to the official wiki, expect to need 5GB - 10GB of RAM.

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /backups - the server will automatically backup your saves when the container first starts
  • /gamefiles - this is for the game's files. They're stored outside of the container to avoid needing to redownload 15GB+ every time you want to rebuild the container
  • /saves - this is for the game's saves. They're copied into the container on start

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Satisfactory server image like this:

docker run -d --name=satisfactory-server -h satisfactory-server -e MAXPLAYERS=4 -e PGID=1000 -e PUID=1000 -e STEAMBETA=false -v /path/to/config:/config -p 7777:7777/udp -p 15000:15000/udp -p 15777:15777/udp wolveix/satisfactory-server:latest

If you're using Docker Compose:

version: '3'services:
satisfactory-server:
container_name: 'satisfactory-server'hostname: 'satisfactory-server'image: 'wolveix/satisfactory-server:latest'ports:
- '7777:7777/udp'
- '15000:15000/udp'
- '15777:15777/udp'volumes:
- '/path/to/config:/config'environment:
- MAXPLAYERS=4
- PGID=1000
- PUID=1000
- STEAMBETA=falserestart: unless-stopped

Environment Variables

ParameterDefaultFunction
AUTOPAUSEtruepause game when no player is connected
AUTOSAVEINTERVAL300autosave interval in seconds
AUTOSAVENUM3number of rotating autosave files
AUTOSAVEONDISCONNECTtrueautosave when last player disconnects
CRASHREPORTtrueautomatic crash reporting
DEBUGfalsefor debugging the server
DISABLESEASONALEVENTSfalsedisable the FICSMAS event (you miserable bastard)
MAXPLAYERS4set the player limit for your server
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERBEACONPORT15000set the game's beacon port
SERVERGAMEPORT7777set the game's port
SERVERIP0.0.0.0set the game's ip (usually not needed)
SERVERQUERYPORT15777set the game's query port
SKIPUPDATEfalseavoid updating the game on container start/restart
STEAMBETAfalseset experimental game version

Loading Your Save

If you want to upload your own save to the server, you'll need to do the following workaround as there's no UI for this in-game just yet.

Per the instructions here, you'll want to place your savefile in the /config/saves directory. Before the next step, you'll need to find out your session name. You can find the session name from either the Load Menu, or through a save editor

Once you've done this, connect to the server in-game. From the Server Settings tab, insert your session name into the appropriate field. You may need to copy & paste the name in and immediately press ENTER, as the UI seems to constantly refresh.

Experimental Branch

If you want to run a server for the Experimental version of the game, set the STEAMBETA environment variable to true.

How to Improve the Multiplayer Experience

The Satisfactory Wiki recommends a few config tweaks to really get the best out of multiplayer. These changes are already applied to the server, but they need to be applied to your local config too:

  • Press WIN + R
  • Enter %localappdata%/FactoryGame/Saved/Config/WindowsNoEditor
  • Copy the config data from the wiki into the respective files
  • Right-click each of the 3 config files (Engine.ini, Game.ini, Scalability.ini)
  • Go to Properties > tick Read-only under the attributes

Known Issues

  • The container is run as root. This is pretty common for Docker images, but is bad practice for security reasons. This change was made to address permissions issues
  • The server log will show various errors; most of which can be safely ignored. As long as the container continues to run and your log looks similar to the example log, the server should be functioning just fine: example log

About

A Dockerized version of the Satisfactory dedicated server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Satisfactory Server

ReleaseDocker PullsDocker StarsImage Size

This is a Dockerized version of the Satisfactory dedicated server.

Setup

According to the official wiki, expect to need 5GB - 10GB of RAM.

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /backups - the server will automatically backup your saves when the container first starts
  • /gamefiles - this is for the game's files. They're stored outside of the container to avoid needing to redownload 15GB+ every time you want to rebuild the container
  • /saves - this is for the game's saves. They're copied into the container on start

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Satisfactory server image like this:

docker run -d --name=satisfactory-server -h satisfactory-server -e MAXPLAYERS=4 -e PGID=1000 -e PUID=1000 -e STEAMBETA=false -v /path/to/config:/config -p 7777:7777/udp -p 15000:15000/udp -p 15777:15777/udp wolveix/satisfactory-server:latest

If you're using Docker Compose:

version: '3'services:
satisfactory-server:
container_name: 'satisfactory-server'hostname: 'satisfactory-server'image: 'wolveix/satisfactory-server:latest'ports:
- '7777:7777/udp'
- '15000:15000/udp'
- '15777:15777/udp'volumes:
- '/path/to/config:/config'environment:
- MAXPLAYERS=4
- PGID=1000
- PUID=1000
- STEAMBETA=falserestart: unless-stopped

Environment Variables

ParameterDefaultFunction
AUTOPAUSEtruepause game when no player is connected
AUTOSAVEINTERVAL300autosave interval in seconds
AUTOSAVENUM3number of rotating autosave files
AUTOSAVEONDISCONNECTtrueautosave when last player disconnects
CRASHREPORTtrueautomatic crash reporting
DEBUGfalsefor debugging the server
DISABLESEASONALEVENTSfalsedisable the FICSMAS event (you miserable bastard)
MAXPLAYERS4set the player limit for your server
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERBEACONPORT15000set the game's beacon port
SERVERGAMEPORT7777set the game's port
SERVERIP0.0.0.0set the game's ip (usually not needed)
SERVERQUERYPORT15777set the game's query port
SKIPUPDATEfalseavoid updating the game on container start/restart
STEAMBETAfalseset experimental game version

Loading Your Save

If you want to upload your own save to the server, you'll need to do the following workaround as there's no UI for this in-game just yet.

Per the instructions here, you'll want to place your savefile in the /config/saves directory. Before the next step, you'll need to find out your session name. You can find the session name from either the Load Menu, or through a save editor

Once you've done this, connect to the server in-game. From the Server Settings tab, insert your session name into the appropriate field. You may need to copy & paste the name in and immediately press ENTER, as the UI seems to constantly refresh.

Experimental Branch

If you want to run a server for the Experimental version of the game, set the STEAMBETA environment variable to true.

How to Improve the Multiplayer Experience

The Satisfactory Wiki recommends a few config tweaks to really get the best out of multiplayer. These changes are already applied to the server, but they need to be applied to your local config too:

  • Press WIN + R
  • Enter %localappdata%/FactoryGame/Saved/Config/WindowsNoEditor
  • Copy the config data from the wiki into the respective files
  • Right-click each of the 3 config files (Engine.ini, Game.ini, Scalability.ini)
  • Go to Properties > tick Read-only under the attributes

Known Issues

  • The container is run as root. This is pretty common for Docker images, but is bad practice for security reasons. This change was made to address permissions issues
  • The server log will show various errors; most of which can be safely ignored. As long as the container continues to run and your log looks similar to the example log, the server should be functioning just fine: example log

About

A Dockerized version of the Satisfactory dedicated server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Satisfactory Server

ReleaseDocker PullsDocker StarsImage Size

This is a Dockerized version of the Satisfactory dedicated server.

Setup

According to the official wiki, expect to need 5GB - 10GB of RAM.

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /backups - the server will automatically backup your saves when the container first starts
  • /gamefiles - this is for the game's files. They're stored outside of the container to avoid needing to redownload 15GB+ every time you want to rebuild the container
  • /saves - this is for the game's saves. They're copied into the container on start

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Satisfactory server image like this:

docker run -d --name=satisfactory-server -h satisfactory-server -e MAXPLAYERS=4 -e PGID=1000 -e PUID=1000 -e STEAMBETA=false -v /path/to/config:/config -p 7777:7777/udp -p 15000:15000/udp -p 15777:15777/udp wolveix/satisfactory-server:latest

If you're using Docker Compose:

version: '3'services:
satisfactory-server:
container_name: 'satisfactory-server'hostname: 'satisfactory-server'image: 'wolveix/satisfactory-server:latest'ports:
- '7777:7777/udp'
- '15000:15000/udp'
- '15777:15777/udp'volumes:
- '/path/to/config:/config'environment:
- MAXPLAYERS=4
- PGID=1000
- PUID=1000
- STEAMBETA=falserestart: unless-stopped

Environment Variables

ParameterDefaultFunction
AUTOPAUSEtruepause game when no player is connected
AUTOSAVEINTERVAL300autosave interval in seconds
AUTOSAVENUM3number of rotating autosave files
AUTOSAVEONDISCONNECTtrueautosave when last player disconnects
CRASHREPORTtrueautomatic crash reporting
DEBUGfalsefor debugging the server
DISABLESEASONALEVENTSfalsedisable the FICSMAS event (you miserable bastard)
MAXPLAYERS4set the player limit for your server
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERBEACONPORT15000set the game's beacon port
SERVERGAMEPORT7777set the game's port
SERVERIP0.0.0.0set the game's ip (usually not needed)
SERVERQUERYPORT15777set the game's query port
SKIPUPDATEfalseavoid updating the game on container start/restart
STEAMBETAfalseset experimental game version

Loading Your Save

If you want to upload your own save to the server, you'll need to do the following workaround as there's no UI for this in-game just yet.

Per the instructions here, you'll want to place your savefile in the /config/saves directory. Before the next step, you'll need to find out your session name. You can find the session name from either the Load Menu, or through a save editor

Once you've done this, connect to the server in-game. From the Server Settings tab, insert your session name into the appropriate field. You may need to copy & paste the name in and immediately press ENTER, as the UI seems to constantly refresh.

Experimental Branch

If you want to run a server for the Experimental version of the game, set the STEAMBETA environment variable to true.

How to Improve the Multiplayer Experience

The Satisfactory Wiki recommends a few config tweaks to really get the best out of multiplayer. These changes are already applied to the server, but they need to be applied to your local config too:

  • Press WIN + R
  • Enter %localappdata%/FactoryGame/Saved/Config/WindowsNoEditor
  • Copy the config data from the wiki into the respective files
  • Right-click each of the 3 config files (Engine.ini, Game.ini, Scalability.ini)
  • Go to Properties > tick Read-only under the attributes

Known Issues

  • The container is run as root. This is pretty common for Docker images, but is bad practice for security reasons. This change was made to address permissions issues
  • The server log will show various errors; most of which can be safely ignored. As long as the container continues to run and your log looks similar to the example log, the server should be functioning just fine: example log

About

A Dockerized version of the Satisfactory dedicated server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Satisfactory Server

ReleaseDocker PullsDocker StarsImage Size

This is a Dockerized version of the Satisfactory dedicated server.

Setup

According to the official wiki, expect to need 5GB - 10GB of RAM.

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /backups - the server will automatically backup your saves when the container first starts
  • /gamefiles - this is for the game's files. They're stored outside of the container to avoid needing to redownload 15GB+ every time you want to rebuild the container
  • /saves - this is for the game's saves. They're copied into the container on start

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Satisfactory server image like this:

docker run -d --name=satisfactory-server -h satisfactory-server -e MAXPLAYERS=4 -e PGID=1000 -e PUID=1000 -e STEAMBETA=false -v /path/to/config:/config -p 7777:7777/udp -p 15000:15000/udp -p 15777:15777/udp wolveix/satisfactory-server:latest

If you're using Docker Compose:

version: '3'services:
satisfactory-server:
container_name: 'satisfactory-server'hostname: 'satisfactory-server'image: 'wolveix/satisfactory-server:latest'ports:
- '7777:7777/udp'
- '15000:15000/udp'
- '15777:15777/udp'volumes:
- '/path/to/config:/config'environment:
- MAXPLAYERS=4
- PGID=1000
- PUID=1000
- STEAMBETA=falserestart: unless-stopped

Environment Variables

ParameterDefaultFunction
AUTOPAUSEtruepause game when no player is connected
AUTOSAVEINTERVAL300autosave interval in seconds
AUTOSAVENUM3number of rotating autosave files
AUTOSAVEONDISCONNECTtrueautosave when last player disconnects
CRASHREPORTtrueautomatic crash reporting
DEBUGfalsefor debugging the server
DISABLESEASONALEVENTSfalsedisable the FICSMAS event (you miserable bastard)
MAXPLAYERS4set the player limit for your server
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERBEACONPORT15000set the game's beacon port
SERVERGAMEPORT7777set the game's port
SERVERIP0.0.0.0set the game's ip (usually not needed)
SERVERQUERYPORT15777set the game's query port
SKIPUPDATEfalseavoid updating the game on container start/restart
STEAMBETAfalseset experimental game version

Loading Your Save

If you want to upload your own save to the server, you'll need to do the following workaround as there's no UI for this in-game just yet.

Per the instructions here, you'll want to place your savefile in the /config/saves directory. Before the next step, you'll need to find out your session name. You can find the session name from either the Load Menu, or through a save editor

Once you've done this, connect to the server in-game. From the Server Settings tab, insert your session name into the appropriate field. You may need to copy & paste the name in and immediately press ENTER, as the UI seems to constantly refresh.

Experimental Branch

If you want to run a server for the Experimental version of the game, set the STEAMBETA environment variable to true.

How to Improve the Multiplayer Experience

The Satisfactory Wiki recommends a few config tweaks to really get the best out of multiplayer. These changes are already applied to the server, but they need to be applied to your local config too:

  • Press WIN + R
  • Enter %localappdata%/FactoryGame/Saved/Config/WindowsNoEditor
  • Copy the config data from the wiki into the respective files
  • Right-click each of the 3 config files (Engine.ini, Game.ini, Scalability.ini)
  • Go to Properties > tick Read-only under the attributes

Known Issues

  • The container is run as root. This is pretty common for Docker images, but is bad practice for security reasons. This change was made to address permissions issues
  • The server log will show various errors; most of which can be safely ignored. As long as the container continues to run and your log looks similar to the example log, the server should be functioning just fine: example log

About

A Dockerized version of the Satisfactory dedicated server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Satisfactory Server

ReleaseDocker PullsDocker StarsImage Size

This is a Dockerized version of the Satisfactory dedicated server.

Setup

According to the official wiki, expect to need 5GB - 10GB of RAM.

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /backups - the server will automatically backup your saves when the container first starts
  • /gamefiles - this is for the game's files. They're stored outside of the container to avoid needing to redownload 15GB+ every time you want to rebuild the container
  • /saves - this is for the game's saves. They're copied into the container on start

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Satisfactory server image like this:

docker run -d --name=satisfactory-server -h satisfactory-server -e MAXPLAYERS=4 -e PGID=1000 -e PUID=1000 -e STEAMBETA=false -v /path/to/config:/config -p 7777:7777/udp -p 15000:15000/udp -p 15777:15777/udp wolveix/satisfactory-server:latest

If you're using Docker Compose:

version: '3'services:
satisfactory-server:
container_name: 'satisfactory-server'hostname: 'satisfactory-server'image: 'wolveix/satisfactory-server:latest'ports:
- '7777:7777/udp'
- '15000:15000/udp'
- '15777:15777/udp'volumes:
- '/path/to/config:/config'environment:
- MAXPLAYERS=4
- PGID=1000
- PUID=1000
- STEAMBETA=falserestart: unless-stopped

Environment Variables

ParameterDefaultFunction
AUTOPAUSEtruepause game when no player is connected
AUTOSAVEINTERVAL300autosave interval in seconds
AUTOSAVENUM3number of rotating autosave files
AUTOSAVEONDISCONNECTtrueautosave when last player disconnects
CRASHREPORTtrueautomatic crash reporting
DEBUGfalsefor debugging the server
DISABLESEASONALEVENTSfalsedisable the FICSMAS event (you miserable bastard)
MAXPLAYERS4set the player limit for your server
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERBEACONPORT15000set the game's beacon port
SERVERGAMEPORT7777set the game's port
SERVERIP0.0.0.0set the game's ip (usually not needed)
SERVERQUERYPORT15777set the game's query port
SKIPUPDATEfalseavoid updating the game on container start/restart
STEAMBETAfalseset experimental game version

Loading Your Save

If you want to upload your own save to the server, you'll need to do the following workaround as there's no UI for this in-game just yet.

Per the instructions here, you'll want to place your savefile in the /config/saves directory. Before the next step, you'll need to find out your session name. You can find the session name from either the Load Menu, or through a save editor

Once you've done this, connect to the server in-game. From the Server Settings tab, insert your session name into the appropriate field. You may need to copy & paste the name in and immediately press ENTER, as the UI seems to constantly refresh.

Experimental Branch

If you want to run a server for the Experimental version of the game, set the STEAMBETA environment variable to true.

How to Improve the Multiplayer Experience

The Satisfactory Wiki recommends a few config tweaks to really get the best out of multiplayer. These changes are already applied to the server, but they need to be applied to your local config too:

  • Press WIN + R
  • Enter %localappdata%/FactoryGame/Saved/Config/WindowsNoEditor
  • Copy the config data from the wiki into the respective files
  • Right-click each of the 3 config files (Engine.ini, Game.ini, Scalability.ini)
  • Go to Properties > tick Read-only under the attributes

Known Issues

  • The container is run as root. This is pretty common for Docker images, but is bad practice for security reasons. This change was made to address permissions issues
  • The server log will show various errors; most of which can be safely ignored. As long as the container continues to run and your log looks similar to the example log, the server should be functioning just fine: example log

About

A Dockerized version of the Satisfactory dedicated server

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages