使用Docker镜像运行 Factorio 异星工厂服务端
由于近期和steam好友在玩,并且游戏升级到2.0后改动的内容非常多,DLC的space age内容也很丰富,所以重新开始玩起来。
考虑到原有的服务端是本地编译并且服务端在不同的云服务中移动比较麻烦,所以将服务端(当前最新版本为2.0.28)进行了容器镜像化,只要有安装Docker服务即可下载容器一键运行,免去了重新部署服务的麻烦。
我已将自己制作的容器化服务端放在了阿里云的容器镜像服务中,可以进行公开下载,当服务端程序有更新时,请下载latest标签的版本,当需要指定服务端版本时,请使用factorio:2.0.28标签进行下载。
使用docker下载镜像:(不指定tag拉取最新版本,指定tag拉取特定版本,版本号可参考官网每一次正式版的changelog标题)
docker pull registry.cn-shanghai.aliyuncs.com/wittchen/factorio
使用测试地图运行服务端:
docker run -d -p 34197:34197/udp registry.cn-shanghai.aliyuncs.com/wittchen/factorio
使用你自己的地图运行服务端:(看-v参数说明)
docker run -d -p 34197:34197/udp --name factorio-srv -v /path/to/host-saves:/path/in/container-saves registry.cn-shanghai.aliyuncs.com/wittchen/factorio --start-server saves/your-map-name.zip
有朋友对docker的卷命令不是很熟悉,对上述命令简单分析下
-v 参数用于映射本地和容器内的目录对应关系,本地指的就是运行这个docker容器的宿主机。在参数赋值内容中“/path/to/host-saves:/path/in/container-saves”,冒号前半部分的/path/to/host-saves指的是你宿主机上的真实目录,比如你在/root/saves/下有一个叫test.zip的地图,那这前半部分就是/root/saves这个路径;后半部分的/path/in/container-saves指的是容器内的地图存放路径,虽然factorio并没有指定地图一定要存放在哪里,但是为了在制作容器时提供一个测试地图,我在factorio目录下直接新建了一个saves目录,所以在使用-v参数挂载时,按上面描述的示例内容,请先给存放地图的目录挂载给容器内的saves目录,使用如下命令运行你的地图:
docker run -d -p 34197:34197/udp --name factorio-srv -v /root/saves:/home/factorio/saves registry.cn-shanghai.aliyuncs.com/wittchen/factorio --start-server saves/test.zip
注意,请不要使用测试地图开始游戏,因为地图打包在镜像内,非持久化卷,不存储数据!
服务端占用的内存量由地图大小和地图内实体数量决定,如启动服务端失败,请使用如下命令运行服务端,查看控制台输出的报错信息:
docker run -it registry.cn-shanghai.aliyuncs.com/wittchen/factorio
大部分报错信息基本是地图加载路径出错,加载失败或服务端启动内存溢出。服务端启动后,控制台输出信息中不应有error信息或closing字样。
PS:默认服务器配置的连接密码设置为123456,服务器名为当前服务端版本号,其他设置均为默认。