QxMO的空间

使用 Docker 快速部署 Minecraft 服务器

这篇文章依旧是开minecraft服务器,但是进阶一点,我们使用docker开服,docker的好处我就不过多赘述了,docker开服的好处也是一样的,隔离、方便、易部署

本文假设你已经成功安装了 Docker 和 Docker Compose(还不会的还不赶紧去看前面几篇文章???)。系统Ubuntu22.04

这篇教程来自这期视频——重点看p2、p3


一、 认识开服镜像:itzg/minecraft-server

这是一个在社区里面比较全面的minecraft镜像,它几乎包含了所有版本,各种类型的服务器核心,并且自带了java不用各位腐竹再去配置java资源什么的——反正用就对了,如果需要找你需要的镜像、核心、版本的,可以去看看官方的文档

拉取最新基础镜像的命令:

docker pull itzg/minecraft-server

二、 方法一:使用 docker run 快速开服(适合新手体验)

一条命令即可开启一个原版生存服务器:

docker run -d \
  -v /你的存放路径/mc-data:/data \
  -p 25565:25565 \
  -e EULA=TRUE \
  -e VERSION=1.21.4 \
  --name my-mc-server \
  itzg/minecraft-server

⚙️ 核心参数详解:

  • docker run: 告诉 Docker 创建并运行一个新的容器。

  • -d: Detached(后台运行)。让服务器在后台默默运行,即使你关掉当前的终端窗口,服务器也不会停止。

  • -v /你的存放路径/mc-data:/data: Volume(数据卷挂载)【非常重要】

    • 冒号左边是你宿主机(你的电脑/云服务器)上的真实文件夹路径(请自行替换为一个存在的路径,如 /home/user/mc-data)。你可以写./mc-data 这种相对路径,也可以是像上面的绝对路径

    • 冒号右边的 /data 是容器内部存放世界地图、配置文件、插件的目录。具体每个镜像文件在哪要看作者怎么说

    • 作用: 这样配置后,你的游戏存档会保存在宿主机上。即使容器被删除,你的存档也不会丢失!最主要是,方便你去对服务器做任何更改

  • -p 25565:25565: Port(端口映射)

    • 左边的 25565 是对外暴露的端口(玩家连接用的端口)。要注意不能和其他程序或容器的端口冲突!!!

    • 右边的 25565 是容器内 Minecraft 服务端默认的端口。如果你的服务器配置文件更改了minecraft服务端端口,那么这个也要改

  • -e EULA=TRUE: Environment(环境变量)。这是 Minecraft 官方的强制要求,必须同意最终用户许可协议(EULA)才能开服,设为 TRUE 代表你同意。环境变量不止有一个eula协议,有非常多的东西可以设置,具体有什么要看这个镜像的作者说了什么,所以——去看看官方文档吧

  • -e VERSION=1.20.4: 环境变量。指定你要开的 Minecraft 版本。如果不写,默认会下载最新版。

  • --name my-mc-server: 给你的容器起个好记的名字(比如 my-mc-server),方便以后管理。

  • itzg/minecraft-server: 指定使用的镜像名称(上一步让你们拉取的镜像)


三、 方法二:使用 Docker Compose 进阶开服(强烈推荐)

相比于输入长长的一串命令,使用 Docker Compose 可以将配置写成文件,然后docker依照这个配置制作容器,非常方便日后修改(比如加内存、换核心、加 MOD)。有了docker compose文件,你也可以带着这个文件去开很多同样配置的容器

  1. 在你的服务器上创建一个新目录,并进入该目录:

    mkdir /home/test1 && cd /home/test1
  2. 创建一个名为 docker-compose.yml 的文件,并写入以下内容:

    services:
      mc:
        image: itzg/minecraft-server
        container_name: fabric-server-1.21.6-test
        ports:
          - "25565:25565"
        environment:
          EULA: "TRUE"
          TYPE: "FABRIC"
          VERSION: "1.21.6"
          FABRIC_LOADER_VERSION: "0.16.14"
          MODRINTH_PROJECTS: "fabric-api"
          MODRINTH_MINECRAFT_VERSION: "1.21.6"
        volumes:
          - /home/test1:/data
        stdin_open: true
        tty: true
        restart: unless-stopped

    📖 逐行详细解析:

    services:

    • 这是 Docker Compose 文件的顶层指令。它告诉 Docker 接下来要定义一个或多个“服务”(即容器)。

    mc:

    • 这是你在 Compose 文件中为这个服务起的内部标识名(这里叫 mc)。如果你有多个服务(比如再加个数据库服务 db),它们就是通过这个名字互相识别的。

    image: itzg/minecraft-server

    • 指定要使用的 Docker 镜像。这里使用的是功能最强大的开源 Minecraft 镜像 itzg/minecraft-server。

    container_name: fabric-server-1.21.6-test

    • 给最终创建出来的容器强制命名为 fabric-server-1.21.6-test。如果不写这行,Docker 会自动生成一个类似 文件夹名-mc-1 的名字。自定义名称方便你以后用 docker logs 等命令进行管理。

    ports:

    • 声明端口映射的配置块。

    - "25565:25565"

    • 格式为 "宿主机端口:容器内端口"。将你服务器(宿主机)的 25565 端口映射到容器内部的 25565 端口。玩家在游戏中输入你的服务器 IP 时,就是通过左边的端口连接进来的。

    environment:

    • 声明环境变量的配置块。这些变量会传递给容器内部的开服脚本,告诉它怎么去下载和配置服务器。

    EULA: "TRUE"

    • 必须项。同意 Minecraft 的最终用户许可协议,否则服务端会拒绝启动。如果你把所有文件都映射到本地了,那么手动改改就可以了,不加这个也没关系

    TYPE: "FABRIC"

    • 告诉镜像脚本:“我要开一个 Fabric 核心的服务器”。脚本识别到这个指令后,会自动去下载 Fabric 服务端,而不是原版或其他版本。

    VERSION: "1.21.6"

    • 指定 Minecraft 的游戏版本为 1.21.6。

    FABRIC_LOADER_VERSION: "0.16.14"

    • 针对 Fabric 核心的高级配置,精确指定 Fabric Loader(加载器)的版本为 0.16.14。如果留空,通常会自动下载推荐的最新版。

    MODRINTH_PROJECTS: "fabric-api"

    • 这是 itzg/minecraft-server 镜像极其强大的功能!它支持直接从 Modrinth 平台自动下载 Mod。这里指定了下载大名鼎鼎的前置 Mod:fabric-api。你再也不用手动去下载 jar 文件并拖进 mods 文件夹了。

    MODRINTH_MINECRAFT_VERSION: "1.21.6"

    • 配合上一行使用。告诉自动下载脚本:“请帮我下载适用于 1.21.6 游戏版本的 fabric-api”,防止下载到版本不兼容的 Mod。

    volumes:

    • 声明数据卷(目录映射)的配置块。

    - /home/test1:/data

    • 格式为 宿主机绝对路径:容器内路径。将你服务器上的 /home/test1 文件夹与容器内的 /data 文件夹绑定。

    • 意义: 容器内所有的游戏存档、配置文件、下载的 Mod 都会真实地保存在 /home/test1 中。哪怕容器崩溃、被删除,你的游戏数据依然安全。我们需要明白,容器是容器,本地文件是本地文件,容器删除本地文件依然留存,如果你本地有服务器文件,那么运行容器将依照这些文件运行!!!

    stdin_open: true

    • 相当于 docker run 里的 -i(interactive)参数。保持标准输入打开,允许你向容器发送指令。

    tty: true

    • 相当于 docker run 里的 -t 参数。为容器分配一个伪终端(TTY)。

    • 意义: stdin_open 和 tty 这两行必须同时存在且为 true,你才能在日后使用 docker attach fabric-server-1.21.6-test 命令进入后台控制台,给玩家上 OP 或者输入 Minecraft 游戏指令。

    restart: unless-stopped

    • 容器重启策略。unless-stopped 意味着:只要服务器开机,或者 Docker 服务重启,这个容器就会自动启动。如果在运行中由于崩溃导致容器停止,Docker 也会自动把它拉起来。除非是你人为输入了 docker stop 命令,它才会乖乖停下。

  3. 跑起 docker compose 脚本:docker-compose.yml 所在的目录下运行:

    docker compose up -d

你可以使用docker attach <容器名称> 进入服务器控制台,当你看到Done! 即为开服成功


四、 服务器日常管理与控制台(必学)

服务器跑起来后,你需要查看日志或输入后台指令(如给某人 OP、改变天气等)。

1. 查看服务器输出日志

docker logs <容器名称>          # 输出一次当前日志

docker logs -f <容器名称>       # 实时滚动显示日志(类似一直盯着屏幕)

注:在 docker logs -f 模式下,按下 Ctrl+C 只是退出日志查看,不会关闭服务器。

2. 进入游戏控制台(输入指令)

如果你想在后台输入 Minecraft 指令(如 /op 玩家名),需要进入容器内部:

docker attach <容器名称>

⚠️ 终极警告(必须记住): 进入 attach 模式后,绝对不要Ctrl+C,否则会直接强制关闭服务器! 正确的退出方法: 依次按下 Ctrl+P 然后 Ctrl+Q,这会将你安全地退出控制台界面,同时让服务器继续在后台运行。

3. 其他常用管理命令

  • 查看正在运行的容器列表: docker ps

  • 查看容器列表(不管是开着的还是关掉的): docker ps -a

  • 删除容器(重置环境): docker rm -f <容器名称>docker rm <容器名称>(加 -f 会强制停止并删除运行中的容器)。


五、 拓展:使用 MCDR (MCDReforged) 镜像

如果你是生电服腐竹,那么可能需要使用MCDR,Docker 同样有专门的镜像支持。

拉取 MCDR 镜像:

docker pull mcdreforged/mcdreforged

MCDR 变体镜像示例(包含特定版本 JDK 等):

docker pull mcdreforged/mcdreforged-temurin:2.15.5-py3.13-slim-jdk21-extra

如需深入配置 MCDR 环境,请参考官方文档:MCDR 的 Docker 文档

然后是写docker compose,这里是一份示例

services:
  main_server:
    image: mcdreforged/mcdreforged-temurin:2.15.5-py3.13-slim-jdk21-extra
    container_name: MCDR
    ports:
      - "25567:25565"
    volumes:
      - /home/test2:/mcdr
    stdin_open: true
    tty: true
    restart: unless-stopped

基本都是差不多的意思,就不多赘述了,文件映射到本地后开服方式就和正常的MCDR开服一模一样了(不会的去翻前面),我是比较推荐使用MCDR容器的,不管开什么服务器如果用到docker都推荐套一个MCDR容器,这样你就可以在自己的电脑配置好后直接上传到映射到服务器本地文件的server文件夹

总结:

docker开服基本没什么难度,因为前人早就已经铺好了路,docker开服的注意事项无非就是写配置时候注意些,各种冲突你能不能找出来,多读读镜像作者写的文档总归是没错的,祝你玩得开心