技术归档文章随笔一句话导航搜索关于

在 Docker 中运行我的世界服务器

日期: 2025-03-22 分组: 我的世界 标签: Docker我的世界 3分钟 511字

构建我的世界服务器基础镜像

创建 Dockerfile

Terminal window
1
FROM openjdk:21
2
3
# 设置工作目录
4
WORKDIR /workspace
5
6
# 复制入口脚本到根目录
7
COPY entrypoint.sh /entrypoint.sh
8
9
# 声明暴露端口(TCP协议)
10
EXPOSE 25565 25575
11
12
# 设置容器启动时执行的入口点
13
ENTRYPOINT ["/entrypoint.sh"]

创建入口脚本 entrypoint.sh

1
#!/bin/sh
2
3
# 检查start.sh是否存在,不存在则创建
4
if [ ! -f ./start.sh ]; then
5
echo "#!/bin/sh" > ./start.sh
6
echo "echo '启动脚本执行'" >> ./start.sh
7
echo "echo '容器工作目录: $(pwd)'" >> ./start.sh
8
echo "echo 'Java版本信息:'" >> ./start.sh
9
echo "java --version" >> ./start.sh
10
chmod +x ./start.sh
11
fi
12
13
# 执行start.sh并传递所有参数
14
exec ./start.sh "$@"

赋予可执行权限

1
chmod +x entrypoint.sh

构建镜像

1
docker build -t minecraft-server:0.0.1 .

运行

Terminal window
1
docker 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/sh
2
java -Xmx10G -Xms1G -jar paper-1.21.3-81.jar nogui

上传好服务端启动文件等基础文件之后再次启动容器即可。

使用 MCSM 托管我的世界服务器

这里使用 Docker 托管 MCSM,不直接在主机上面安装

创建如下 docker-compose.yml 文件,用来运行 mcsmanager-daemon,可自需更改。

1
services:
2
mcsm-daemon:
3
image: docker.1ms.run/githubyumao/mcsmanager-daemon:v10.5.0
4
container_name: mcsmanager-daemon
5
restart: always
6
networks:
7
- 1panel-network
8
ports:
9
- "40000:24444"
10
volumes:
11
- /data/docker/mcsm/daemon:/opt/mcsmanager/daemon/data
12
- /data/docker/mcsm/daemon:/data/docker/mcsm/daemon
13
- /var/run/docker.sock:/var/run/docker.sock
14
labels:
15
createdBy: "Apps"
3 collapsed lines
16
networks:
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能在代码层次之外解决掉。

人应当是有理想的.
文章目录