构建我的世界服务器基础镜像
创建 Dockerfile
1FROM openjdk:212
3# 设置工作目录4WORKDIR /workspace5
6# 复制入口脚本到根目录7COPY entrypoint.sh /entrypoint.sh8
9# 声明暴露端口(TCP协议)10EXPOSE 25565 2557511
12# 设置容器启动时执行的入口点13ENTRYPOINT ["/entrypoint.sh"]创建入口脚本 entrypoint.sh
1#!/bin/sh2
3# 检查start.sh是否存在,不存在则创建4if [ ! -f ./start.sh ]; then5 echo "#!/bin/sh" > ./start.sh6 echo "echo '启动脚本执行'" >> ./start.sh7 echo "echo '容器工作目录: $(pwd)'" >> ./start.sh8 echo "echo 'Java版本信息:'" >> ./start.sh9 echo "java --version" >> ./start.sh10 chmod +x ./start.sh11fi12
13# 执行start.sh并传递所有参数14exec ./start.sh "$@"赋予可执行权限
1chmod +x entrypoint.sh构建镜像
1docker build -t minecraft-server:0.0.1 .运行
1docker run -it -p 25565:25565 -v /data/docker/minecraft/server:/workspace --name minecraft-server-1.21.3 minecraft-server:0.0.1镜像第一次运行时会创建 start.sh 脚本,在脚本内执行服务器运行命令,如:
1#!/bin/sh2java -Xmx10G -Xms1G -jar paper-1.21.3-81.jar nogui上传好服务端启动文件等基础文件之后再次启动容器即可。
使用 MCSM 托管我的世界服务器
这里使用 Docker 托管 MCSM,不直接在主机上面安装
创建如下 docker-compose.yml 文件,用来运行 mcsmanager-daemon,可自需更改。
1services:2 mcsm-daemon:3 image: docker.1ms.run/githubyumao/mcsmanager-daemon:v10.5.04 container_name: mcsmanager-daemon5 restart: always6 networks:7 - 1panel-network8 ports:9 - "40000:24444"10 volumes:11 - /data/docker/mcsm/daemon:/opt/mcsmanager/daemon/data12 - /data/docker/mcsm/daemon:/data/docker/mcsm/daemon13 - /var/run/docker.sock:/var/run/docker.sock14 labels:15 createdBy: "Apps"3 collapsed lines
16networks:17 1panel-network:18 external: true安装好 MCSManager 前后端之后,正常创建Docker实例即可。
使用 Docker 运行 MCSM 后端时的注意点
daemon 与 mc-server 容器是平级的,daemon 容器中有 /opt/mcsmanager/daemon/data,因为已经挂载,但是主机当中没有,这时候 mc-server 容器启动时想要挂载 /opt/mcsmanager/daemon/data,会出现找不到目录的报错,/data/docker/mcsm/daemon:/data/docker/mcsm/daemon daemon 多挂载一个目录,将 /data/docker/mcsm/daemon 作为 daemon 配置的工作目录,这时候 daemon 在启动 mc-server 容器时,会自动配置成 /data/docker/mcsm/daemon,这个目录在主机中是存在的,所以就避免报错了。
如果 daemon 前后挂载点都是
/opt/mcsmanager/daemon/data的话,是不会出现这个问题的,我认为这是一个BUG,但是这个BUG能在代码层次之外解决掉。