|
|
@ -1,12 +1,11 @@
|
|
|
|
# Factorio [](https://travis-ci.org/factoriotools/factorio-docker) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://microbadger.com/images/factoriotools/factorio "Get your own image badge on microbadger.com")
|
|
|
|
# Factorio [](https://travis-ci.org/factoriotools/factorio-docker) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://hub.docker.com/r/factoriotools/factorio/) [](https://microbadger.com/images/factoriotools/factorio "Get your own image badge on microbadger.com")
|
|
|
|
|
|
|
|
|
|
|
|
* `0.17.73`, `0.17`, `latest` [(0.17/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.17/Dockerfile)
|
|
|
|
* `0.17.79`, `0.17`, `latest`, `stable` [(0.17/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.17/Dockerfile)
|
|
|
|
* `0.17.73` `stable` [(0.17/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.17/Dockerfile)
|
|
|
|
|
|
|
|
* `0.16.51`, `0.16` [(0.16/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.16/Dockerfile)
|
|
|
|
* `0.16.51`, `0.16` [(0.16/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.16/Dockerfile)
|
|
|
|
* `0.15.40`, `0.15` [(0.15/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.15/Dockerfile)
|
|
|
|
* `0.15.40`, `0.15` [(0.15/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.15/Dockerfile)
|
|
|
|
* `0.14.23`, `0.14` [(0.14/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.14/Dockerfile)
|
|
|
|
* `0.14.23`, `0.14` [(0.14/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.14/Dockerfile)
|
|
|
|
|
|
|
|
|
|
|
|
*Tag descriptions*
|
|
|
|
## Tag descriptions
|
|
|
|
|
|
|
|
|
|
|
|
* `latest` - most up-to-date version (may be experimental).
|
|
|
|
* `latest` - most up-to-date version (may be experimental).
|
|
|
|
* `stable` - version declared stable on [factorio.com](https://www.factorio.com).
|
|
|
|
* `stable` - version declared stable on [factorio.com](https://www.factorio.com).
|
|
|
@ -14,8 +13,7 @@
|
|
|
|
* `0.x.y` - a specific version.
|
|
|
|
* `0.x.y` - a specific version.
|
|
|
|
* `0.x-z` - incremental fix for that version.
|
|
|
|
* `0.x-z` - incremental fix for that version.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## What is Factorio?
|
|
|
|
# What is Factorio?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Factorio](https://www.factorio.com) is a game in which you build and maintain factories.
|
|
|
|
[Factorio](https://www.factorio.com) is a game in which you build and maintain factories.
|
|
|
|
|
|
|
|
|
|
|
@ -25,14 +23,13 @@ The game is very stable and optimized for building massive factories. You can cr
|
|
|
|
|
|
|
|
|
|
|
|
NOTE: This is only the server. The full game is available at [Factorio.com](https://www.factorio.com), [Steam](https://store.steampowered.com/app/427520/), [GOG.com](https://www.gog.com/game/factorio) and [Humble Bundle](https://www.humblebundle.com/store/factorio).
|
|
|
|
NOTE: This is only the server. The full game is available at [Factorio.com](https://www.factorio.com), [Steam](https://store.steampowered.com/app/427520/), [GOG.com](https://www.gog.com/game/factorio) and [Humble Bundle](https://www.humblebundle.com/store/factorio).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
|
|
# Usage
|
|
|
|
### Quick Start
|
|
|
|
|
|
|
|
|
|
|
|
## Quick Start
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Run the server to create the necessary folder structure and configuration files. For this example data is stored in `/opt/factorio`.
|
|
|
|
Run the server to create the necessary folder structure and configuration files. For this example data is stored in `/opt/factorio`.
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
sudo mkdir -p /opt/factorio
|
|
|
|
sudo mkdir -p /opt/factorio
|
|
|
|
sudo chown 845:845 /opt/factorio
|
|
|
|
sudo chown 845:845 /opt/factorio
|
|
|
|
sudo docker run -d \
|
|
|
|
sudo docker run -d \
|
|
|
@ -56,36 +53,36 @@ The `chown` command is needed because in 0.16+, we no longer run the game server
|
|
|
|
|
|
|
|
|
|
|
|
Check the logs to see what happened:
|
|
|
|
Check the logs to see what happened:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
docker logs factorio
|
|
|
|
docker logs factorio
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Stop the server:
|
|
|
|
Stop the server:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
docker stop factorio
|
|
|
|
docker stop factorio
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Now there's a `server-settings.json` file in the folder `/opt/factorio/config`. Modify this to your liking and restart the server:
|
|
|
|
Now there's a `server-settings.json` file in the folder `/opt/factorio/config`. Modify this to your liking and restart the server:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
docker start factorio
|
|
|
|
docker start factorio
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Try to connect to the server. Check the logs if it isn't working.
|
|
|
|
Try to connect to the server. Check the logs if it isn't working.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Console
|
|
|
|
## Console
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To issue console commands to the server, start the server in interactive mode with `-it`. Open the console with `docker attach` and then type commands.
|
|
|
|
To issue console commands to the server, start the server in interactive mode with `-it`. Open the console with `docker attach` and then type commands.
|
|
|
|
|
|
|
|
|
|
|
|
docker run -d -it \
|
|
|
|
```shell
|
|
|
|
--name factorio \
|
|
|
|
docker run -d -it \
|
|
|
|
factoriotools/factorio
|
|
|
|
--name factorio \
|
|
|
|
docker attach factorio
|
|
|
|
factoriotools/factorio
|
|
|
|
|
|
|
|
docker attach factorio
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Upgrading
|
|
|
|
## Upgrading
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Before upgrading backup the save. It's easy to make a save in the client.
|
|
|
|
Before upgrading backup the save. It's easy to make a save in the client.
|
|
|
|
|
|
|
|
|
|
|
@ -93,14 +90,15 @@ Ensure `-v` was used to run the server so the save is outside of the Docker cont
|
|
|
|
|
|
|
|
|
|
|
|
Delete the container and refresh the image:
|
|
|
|
Delete the container and refresh the image:
|
|
|
|
|
|
|
|
|
|
|
|
docker stop factorio
|
|
|
|
```shell
|
|
|
|
docker rm factorio
|
|
|
|
docker stop factorio
|
|
|
|
docker pull factoriotools/factorio
|
|
|
|
docker rm factorio
|
|
|
|
|
|
|
|
docker pull factoriotools/factorio
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Now run the server as before. In about a minute the new version of Factorio should be up and running, complete with saves and config!
|
|
|
|
Now run the server as before. In about a minute the new version of Factorio should be up and running, complete with saves and config!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Saves
|
|
|
|
## Saves
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A new map named `_autosave1.zip` is generated the first time the server is started. The `map-gen-settings.json` and `map-settings.json` files in `/opt/factorio/config` are used for the map settings. On subsequent runs the newest save is used.
|
|
|
|
A new map named `_autosave1.zip` is generated the first time the server is started. The `map-gen-settings.json` and `map-settings.json` files in `/opt/factorio/config` are used for the map settings. On subsequent runs the newest save is used.
|
|
|
|
|
|
|
|
|
|
|
@ -108,19 +106,50 @@ To load an old save stop the server and run the command `touch oldsave.zip`. Thi
|
|
|
|
|
|
|
|
|
|
|
|
To generate a new map stop the server, delete all of the saves and restart the server.
|
|
|
|
To generate a new map stop the server, delete all of the saves and restart the server.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Specify a save directly (0.17.79-2+)
|
|
|
|
|
|
|
|
|
|
|
|
## Mods
|
|
|
|
You can specify a specific save to load by configuring the server through a set of environment variables:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To load an existing save set `SAVE_NAME` to the name of your existing save file located within the `saves` directory, without the `.zip` extension:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
|
|
|
sudo docker run -d \
|
|
|
|
|
|
|
|
-p 34197:34197/udp \
|
|
|
|
|
|
|
|
-p 27015:27015/tcp \
|
|
|
|
|
|
|
|
-v /opt/factorio:/factorio \
|
|
|
|
|
|
|
|
-e ENABLE_SERVER_LOAD_LATEST=false \
|
|
|
|
|
|
|
|
-e SAVE_NAME=replaceme \
|
|
|
|
|
|
|
|
--name factorio \
|
|
|
|
|
|
|
|
--restart=always \
|
|
|
|
|
|
|
|
factoriotools/factorio
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To generate a new map set `ENABLE_GENERATE_NEW_MAP_SAVE=true` and specify `SAVE_NAME`:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
|
|
|
sudo docker run -d \
|
|
|
|
|
|
|
|
-p 34197:34197/udp \
|
|
|
|
|
|
|
|
-p 27015:27015/tcp \
|
|
|
|
|
|
|
|
-v /opt/factorio:/factorio \
|
|
|
|
|
|
|
|
-e ENABLE_SERVER_LOAD_LATEST=false \
|
|
|
|
|
|
|
|
-e ENABLE_GENERATE_NEW_MAP_SAVE=true \
|
|
|
|
|
|
|
|
-e SAVE_NAME=replaceme \
|
|
|
|
|
|
|
|
--name factorio \
|
|
|
|
|
|
|
|
--restart=always \
|
|
|
|
|
|
|
|
factoriotools/factorio
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Mods
|
|
|
|
|
|
|
|
|
|
|
|
Copy mods into the mods folder and restart the server.
|
|
|
|
Copy mods into the mods folder and restart the server.
|
|
|
|
|
|
|
|
|
|
|
|
As of 0.17 a new environment variable was added ``UPDATE_MODS_ON_START`` which if set to ``true`` will cause the mods get to updated on server start. If set a valid [Factorio Username and Token](https://www.factorio.com/profile) must be supplied or else the server will not start. They can either be set as docker secrets, environment variables, or pulled from the server-settings.json file.
|
|
|
|
As of 0.17 a new environment variable was added ``UPDATE_MODS_ON_START`` which if set to ``true`` will cause the mods get to updated on server start. If set a valid [Factorio Username and Token](https://www.factorio.com/profile) must be supplied or else the server will not start. They can either be set as docker secrets, environment variables, or pulled from the server-settings.json file.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Scenarios
|
|
|
|
## Scenarios
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If you want to launch a scenario from a clean start (not from a saved map) you'll need to start the docker image from an alternate entrypoint. To do this, use the example entrypoint file stored in the /factorio/entrypoints directory in the volume, and launch the image with the following syntax. Note that this is the normal syntax with the addition of the --entrypoint setting AND the additional argument at the end, which is the name of the Scenario in the Scenarios folder.
|
|
|
|
If you want to launch a scenario from a clean start (not from a saved map) you'll need to start the docker image from an alternate entrypoint. To do this, use the example entrypoint file stored in the /factorio/entrypoints directory in the volume, and launch the image with the following syntax. Note that this is the normal syntax with the addition of the --entrypoint setting AND the additional argument at the end, which is the name of the Scenario in the Scenarios folder.
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
docker run -d \
|
|
|
|
docker run -d \
|
|
|
|
-p 34197:34197/udp \
|
|
|
|
-p 34197:34197/udp \
|
|
|
|
-p 27015:27015/tcp \
|
|
|
|
-p 27015:27015/tcp \
|
|
|
@ -132,11 +161,11 @@ docker run -d \
|
|
|
|
MyScenarioName
|
|
|
|
MyScenarioName
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Converting Scenarios to Regular Maps
|
|
|
|
### Converting Scenarios to Regular Maps
|
|
|
|
|
|
|
|
|
|
|
|
If you would like to export your scenario to a saved map, you can use the example entrypoint similar to the Scenario usage above. Factorio will run once, converting the Scenario to a saved Map in your saves directory. A restart of the docker image using the standard options will then load that map, just as if the scenario were just started by the Scenarios example noted above.
|
|
|
|
If you would like to export your scenario to a saved map, you can use the example entrypoint similar to the Scenario usage above. Factorio will run once, converting the Scenario to a saved Map in your saves directory. A restart of the docker image using the standard options will then load that map, just as if the scenario were just started by the Scenarios example noted above.
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
docker run -d \
|
|
|
|
docker run -d \
|
|
|
|
-p 34197:34197/udp \
|
|
|
|
-p 34197:34197/udp \
|
|
|
|
-p 27015:27015/tcp \
|
|
|
|
-p 27015:27015/tcp \
|
|
|
@ -148,7 +177,7 @@ docker run -d \
|
|
|
|
MyScenarioName
|
|
|
|
MyScenarioName
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## RCON
|
|
|
|
### RCON
|
|
|
|
|
|
|
|
|
|
|
|
Set the RCON password in the `rconpw` file. A random password is generated if `rconpw` doesn't exist.
|
|
|
|
Set the RCON password in the `rconpw` file. A random password is generated if `rconpw` doesn't exist.
|
|
|
|
|
|
|
|
|
|
|
@ -156,60 +185,67 @@ To change the password, stop the server, modify `rconpw`, and restart the server
|
|
|
|
|
|
|
|
|
|
|
|
To "disable" RCON don't expose port 27015, i.e. start the server without `-p 27015:27015/tcp`. RCON is still running, but nobody can to connect to it.
|
|
|
|
To "disable" RCON don't expose port 27015, i.e. start the server without `-p 27015:27015/tcp`. RCON is still running, but nobody can to connect to it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Whitelisting (0.15.3+)
|
|
|
|
## Whitelisting (0.15.3+)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Create file `config/server-whitelist.json` and add the whitelisted users.
|
|
|
|
Create file `config/server-whitelist.json` and add the whitelisted users.
|
|
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
```json
|
|
|
|
"you",
|
|
|
|
[
|
|
|
|
"friend"
|
|
|
|
"you",
|
|
|
|
]
|
|
|
|
"friend"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Banlisting (0.17.1+)
|
|
|
|
### Banlisting (0.17.1+)
|
|
|
|
|
|
|
|
|
|
|
|
Create file `config/server-banlist.json` and add the banlisted users.
|
|
|
|
Create file `config/server-banlist.json` and add the banlisted users.
|
|
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
```json
|
|
|
|
"bad_person",
|
|
|
|
[
|
|
|
|
"other_bad_person"
|
|
|
|
"bad_person",
|
|
|
|
]
|
|
|
|
"other_bad_person"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Adminlisting (0.17.1+)
|
|
|
|
### Adminlisting (0.17.1+)
|
|
|
|
|
|
|
|
|
|
|
|
Create file `config/server-adminlist.json` and add the adminlisted users.
|
|
|
|
Create file `config/server-adminlist.json` and add the adminlisted users.
|
|
|
|
|
|
|
|
|
|
|
|
[
|
|
|
|
```json
|
|
|
|
"you",
|
|
|
|
[
|
|
|
|
"friend"
|
|
|
|
"you",
|
|
|
|
]
|
|
|
|
"friend"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Customize configuration files (0.17.x+)
|
|
|
|
### Customize configuration files (0.17.x+)
|
|
|
|
|
|
|
|
|
|
|
|
Out-of-the box, factorio does not support environment variables inside the configuration files. A workaround is the usage of `envsubst` which generates the configuration files dynamically during startup from environment variables set in docker-compose:
|
|
|
|
Out-of-the box, factorio does not support environment variables inside the configuration files. A workaround is the usage of `envsubst` which generates the configuration files dynamically during startup from environment variables set in docker-compose:
|
|
|
|
|
|
|
|
|
|
|
|
Example which replaces the server-settings.json:
|
|
|
|
Example which replaces the server-settings.json:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
factorio_1:
|
|
|
|
factorio_1:
|
|
|
|
image: factoriotools/factorio
|
|
|
|
image: factoriotools/factorio
|
|
|
|
ports:
|
|
|
|
ports:
|
|
|
|
- "34197:34197/udp"
|
|
|
|
- "34197:34197/udp"
|
|
|
|
volumes:
|
|
|
|
volumes:
|
|
|
|
- /opt/factorio:/factorio
|
|
|
|
- /opt/factorio:/factorio
|
|
|
|
- ./server-settings.json:/server-settings.json
|
|
|
|
- ./server-settings.json:/server-settings.json
|
|
|
|
environment:
|
|
|
|
environment:
|
|
|
|
- INSTANCE_NAME=Your Instance's Name
|
|
|
|
- INSTANCE_NAME=Your Instance's Name
|
|
|
|
- INSTANCE_DESC=Your Instance's Description
|
|
|
|
- INSTANCE_DESC=Your Instance's Description
|
|
|
|
entrypoint: /bin/sh -c "mkdir -p /factorio/config && envsubst < /server-settings.json > /factorio/config/server-settings.json && exec /docker-entrypoint.sh"
|
|
|
|
entrypoint: /bin/sh -c "mkdir -p /factorio/config && envsubst < /server-settings.json > /factorio/config/server-settings.json && exec /docker-entrypoint.sh"
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
The `server-settings.json` file may then contain the variable references like this:
|
|
|
|
The `server-settings.json` file may then contain the variable references like this:
|
|
|
|
|
|
|
|
|
|
|
|
"name": "${INSTANCE_NAME}",
|
|
|
|
```json
|
|
|
|
"description": "${INSTANCE_DESC}",
|
|
|
|
"name": "${INSTANCE_NAME}",
|
|
|
|
|
|
|
|
"description": "${INSTANCE_DESC}",
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Container Details
|
|
|
|
# Container Details
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The philosophy is to [keep it simple](http://wiki.c2.com/?KeepItSimple).
|
|
|
|
The philosophy is to [keep it simple](http://wiki.c2.com/?KeepItSimple).
|
|
|
|
|
|
|
|
|
|
|
@ -217,26 +253,27 @@ The philosophy is to [keep it simple](http://wiki.c2.com/?KeepItSimple).
|
|
|
|
* Prefer configuration files over environment variables.
|
|
|
|
* Prefer configuration files over environment variables.
|
|
|
|
* Use one volume for data.
|
|
|
|
* Use one volume for data.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Volumes
|
|
|
|
## Volumes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To keep things simple, the container uses a single volume mounted at `/factorio`. This volume stores configuration, mods, and saves.
|
|
|
|
To keep things simple, the container uses a single volume mounted at `/factorio`. This volume stores configuration, mods, and saves.
|
|
|
|
|
|
|
|
|
|
|
|
The files in this volume should be owned by the factorio user, uid 845.
|
|
|
|
The files in this volume should be owned by the factorio user, uid 845.
|
|
|
|
|
|
|
|
|
|
|
|
factorio
|
|
|
|
```text
|
|
|
|
|-- config
|
|
|
|
factorio
|
|
|
|
| |-- map-gen-settings.json
|
|
|
|
|-- config
|
|
|
|
| |-- map-settings.json
|
|
|
|
| |-- map-gen-settings.json
|
|
|
|
| |-- rconpw
|
|
|
|
| |-- map-settings.json
|
|
|
|
| |-- server-adminlist.json
|
|
|
|
| |-- rconpw
|
|
|
|
| |-- server-banlist.json
|
|
|
|
| |-- server-adminlist.json
|
|
|
|
| |-- server-settings.json
|
|
|
|
| |-- server-banlist.json
|
|
|
|
| `-- server-whitelist.json
|
|
|
|
| |-- server-settings.json
|
|
|
|
|-- mods
|
|
|
|
| `-- server-whitelist.json
|
|
|
|
| `-- fancymod.zip
|
|
|
|
|-- mods
|
|
|
|
`-- saves
|
|
|
|
| `-- fancymod.zip
|
|
|
|
`-- _autosave1.zip
|
|
|
|
`-- saves
|
|
|
|
|
|
|
|
`-- _autosave1.zip
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Docker Compose
|
|
|
|
## Docker Compose
|
|
|
|
|
|
|
|
|
|
|
@ -244,14 +281,14 @@ The files in this volume should be owned by the factorio user, uid 845.
|
|
|
|
|
|
|
|
|
|
|
|
First get a [docker-compose.yml](https://github.com/factoriotools/factorio-docker/blob/master/0.17/docker-compose.yml) file. To get it from this repository:
|
|
|
|
First get a [docker-compose.yml](https://github.com/factoriotools/factorio-docker/blob/master/0.17/docker-compose.yml) file. To get it from this repository:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
git clone https://github.com/factoriotools/factorio-docker.git
|
|
|
|
git clone https://github.com/factoriotools/factorio-docker.git
|
|
|
|
cd docker_factorio_server/0.17
|
|
|
|
cd docker_factorio_server/0.17
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Or make your own:
|
|
|
|
Or make your own:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
version: '2'
|
|
|
|
version: '2'
|
|
|
|
services:
|
|
|
|
services:
|
|
|
|
factorio:
|
|
|
|
factorio:
|
|
|
@ -265,30 +302,22 @@ services:
|
|
|
|
|
|
|
|
|
|
|
|
Now cd to the directory with docker-compose.yml and run:
|
|
|
|
Now cd to the directory with docker-compose.yml and run:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
sudo mkdir -p /opt/factorio
|
|
|
|
sudo mkdir -p /opt/factorio
|
|
|
|
sudo chown 845:845 /opt/factorio
|
|
|
|
sudo chown 845:845 /opt/factorio
|
|
|
|
sudo docker-compose up -d
|
|
|
|
sudo docker-compose up -d
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Ports
|
|
|
|
## Ports
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* `34197/udp` - Game server (required).
|
|
|
|
* `34197/udp` - Game server (required).
|
|
|
|
* `27015/tcp` - RCON (optional).
|
|
|
|
* `27015/tcp` - RCON (optional).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Environment Variables
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* `PORT` (0.15+) - Start the server on an alternate port, .e.g. `docker run -e "PORT=34198"`.
|
|
|
|
|
|
|
|
* `RCON_PORT` (0.16+) - Start the RCON on an alternate port, .e.g. `docker run -e "RCON_PORT=34198"`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## LAN Games
|
|
|
|
## LAN Games
|
|
|
|
|
|
|
|
|
|
|
|
Ensure the `lan` setting in server-settings.json is `true`.
|
|
|
|
Ensure the `lan` setting in server-settings.json is `true`.
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
"visibility":
|
|
|
|
"visibility":
|
|
|
|
{
|
|
|
|
{
|
|
|
|
"public": false,
|
|
|
|
"public": false,
|
|
|
@ -298,7 +327,7 @@ Ensure the `lan` setting in server-settings.json is `true`.
|
|
|
|
|
|
|
|
|
|
|
|
Start the container with the `--network=host` option so clients can automatically find LAN games. Refer to the Quick Start to create the `/opt/factorio` directory.
|
|
|
|
Start the container with the `--network=host` option so clients can automatically find LAN games. Refer to the Quick Start to create the `/opt/factorio` directory.
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```shell
|
|
|
|
sudo docker run -d \
|
|
|
|
sudo docker run -d \
|
|
|
|
--network=host \
|
|
|
|
--network=host \
|
|
|
|
-p 34197:34197/udp \
|
|
|
|
-p 34197:34197/udp \
|
|
|
@ -309,24 +338,26 @@ sudo docker run -d \
|
|
|
|
factoriotools/factorio
|
|
|
|
factoriotools/factorio
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Vagrant
|
|
|
|
## Deploy to other plaforms
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Vagrant
|
|
|
|
|
|
|
|
|
|
|
|
[Vagrant](https://www.vagrantup.com/) is a easy way to setup a virtual machine (VM) to run Docker. The [Factorio Vagrant box repository](https://github.com/dtandersen/factorio-lan-vagrant) contains a sample Vagrantfile.
|
|
|
|
[Vagrant](https://www.vagrantup.com/) is a easy way to setup a virtual machine (VM) to run Docker. The [Factorio Vagrant box repository](https://github.com/dtandersen/factorio-lan-vagrant) contains a sample Vagrantfile.
|
|
|
|
|
|
|
|
|
|
|
|
For LAN games the VM needs an internal IP in order for clients to connect. One way to do this is with a public network. The VM uses DHCP to acquire an IP address. The VM must also forward port 34197.
|
|
|
|
For LAN games the VM needs an internal IP in order for clients to connect. One way to do this is with a public network. The VM uses DHCP to acquire an IP address. The VM must also forward port 34197.
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```ruby
|
|
|
|
config.vm.network "public_network"
|
|
|
|
config.vm.network "public_network"
|
|
|
|
config.vm.network "forwarded_port", guest: 34197, host: 34197
|
|
|
|
config.vm.network "forwarded_port", guest: 34197, host: 34197
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Amazon Web Services (AWS) Deployment
|
|
|
|
### Amazon Web Services (AWS) Deployment
|
|
|
|
|
|
|
|
|
|
|
|
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Factorio Server Deployment (CloudFormation) repository](https://github.com/m-chandler/factorio-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.
|
|
|
|
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Factorio Server Deployment (CloudFormation) repository](https://github.com/m-chandler/factorio-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.
|
|
|
|
|
|
|
|
|
|
|
|
## Troubleshooting
|
|
|
|
## Troubleshooting
|
|
|
|
|
|
|
|
|
|
|
|
**My server is listed in the server browser, but nobody can connect**
|
|
|
|
### My server is listed in the server browser, but nobody can connect
|
|
|
|
|
|
|
|
|
|
|
|
Check the logs. If there is the line `Own address is RIGHT IP:WRONG PORT`, then this could be caused by the Docker proxy. If the the IP and port is correct it's probably a port forwarding or firewall issue instead.
|
|
|
|
Check the logs. If there is the line `Own address is RIGHT IP:WRONG PORT`, then this could be caused by the Docker proxy. If the the IP and port is correct it's probably a port forwarding or firewall issue instead.
|
|
|
|
|
|
|
|
|
|
|
@ -334,16 +365,15 @@ By default, Docker routes traffic through a proxy. The proxy changes the source
|
|
|
|
|
|
|
|
|
|
|
|
To fix the incorrect port, start the Docker service with the `--userland-proxy=false` switch. Docker will route traffic with iptables rules instead of a proxy. Add the switch to the `DOCKER_OPTS` environment variable or `ExecStart` in the Docker systemd service definition. The specifics vary by operating system.
|
|
|
|
To fix the incorrect port, start the Docker service with the `--userland-proxy=false` switch. Docker will route traffic with iptables rules instead of a proxy. Add the switch to the `DOCKER_OPTS` environment variable or `ExecStart` in the Docker systemd service definition. The specifics vary by operating system.
|
|
|
|
|
|
|
|
|
|
|
|
**When I run a server on a port besides 34197 nobody can connect from the server browser**
|
|
|
|
### When I run a server on a port besides 34197 nobody can connect from the server browser
|
|
|
|
|
|
|
|
|
|
|
|
Use the `PORT` environment variable to start the server on the a different port, .e.g. `docker run -e "PORT=34198"`. This changes the source port on the packets used for port detection. `-p 34198:34197` works fine for private servers, but the server browser detects the wrong port.
|
|
|
|
Use the `PORT` environment variable to start the server on the a different port, .e.g. `docker run -e "PORT=34198"`. This changes the source port on the packets used for port detection. `-p 34198:34197` works fine for private servers, but the server browser detects the wrong port.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Contributors
|
|
|
|
# Contributors
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* [dtandersen](https://github.com/dtandersen) - Maintainer
|
|
|
|
* [dtandersen](https://github.com/dtandersen) - Maintainer
|
|
|
|
* [Fank](https://github.com/Fankserver) - Keeper of the Factorio watchdog that keeps the version up-to-date.
|
|
|
|
* [Fank](https://github.com/Fankserver) - Programmer of the Factorio watchdog that keeps the version up-to-date.
|
|
|
|
* [SuperSandro2000](https://github.com/supersandro2000) - CI Guy, Maintainer and runner of the Factorio watchdog, contributed version updates
|
|
|
|
* [SuperSandro2000](https://github.com/supersandro2000) - CI Guy, Maintainer and runner of the Factorio watchdog. Contributed version updates and wrote the Travis scripts.
|
|
|
|
* [DBendit](https://github.com/DBendit/docker_factorio_server) - Coded admin list, ban list support and contributed version updates
|
|
|
|
* [DBendit](https://github.com/DBendit/docker_factorio_server) - Coded admin list, ban list support and contributed version updates
|
|
|
|
* [Zopanix](https://github.com/zopanix/docker_factorio_server) - Original Author
|
|
|
|
* [Zopanix](https://github.com/zopanix/docker_factorio_server) - Original Author
|
|
|
|
* [Rfvgyhn](https://github.com/Rfvgyhn/docker-factorio) - Coded randomly generated RCON password
|
|
|
|
* [Rfvgyhn](https://github.com/Rfvgyhn/docker-factorio) - Coded randomly generated RCON password
|
|
|
|