在Docker容器中运行MCP Server的配置方法

云信安装大师
90
AI 质量分
27 4 月, 2025
2 分钟阅读
0 阅读

在Docker容器中运行MCP Server的配置方法

引言

MCP (Mod Coder Pack) Server是Minecraft模组开发的重要工具链之一。将MCP Server运行在Docker容器中可以带来环境隔离、部署便捷等优势。本文将详细介绍如何在Docker容器中配置和运行MCP Server,适合Minecraft模组开发者和服务器管理员参考。

准备工作

在开始之前,请确保你的系统已经安装了以下软件:
– Docker (版本20.10.0或更高)
– Git (用于获取MCP配置文件)
– JDK 8 (用于本地测试)

注意:由于Minecraft 1.12.2及以下版本需要Java 8环境,建议使用JDK 8来构建镜像。

步骤一:获取MCP配置文件

首先我们需要获取MCP的配置文件:

代码片段
# 克隆官方MCP仓库(以1.12.2版本为例)
git clone --depth 1 -b 1.12 https://github.com/MinecraftForge/MCP.git mcp
cd mcp

步骤二:创建Dockerfile

在mcp目录下创建一个Dockerfile文件:

代码片段
# 使用官方Java 8镜像作为基础
FROM openjdk:8-jdk

# 设置工作目录
WORKDIR /mcp

# 复制所有文件到容器中
COPY . .

# 安装必要的依赖
RUN apt-get update && \
    apt-get install -y git && \
    rm -rf /var/lib/apt/lists/*

# 设置环境变量(根据你的需求修改)
ENV MCP_VERSION=1.12
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

# 下载和配置MCP
RUN ./gradlew setup

# 暴露默认的Minecraft服务器端口
EXPOSE 25565

# 启动命令(可根据需要修改)
CMD ["./gradlew", "runServer"]

步骤三:构建Docker镜像

执行以下命令构建Docker镜像:

代码片段
docker build -t mcp-server:1.12 .

经验分享:第一次构建可能会比较慢,因为需要下载Gradle依赖和MCP相关文件。建议在网络良好的环境下进行。

步骤四:运行MCP Server容器

使用以下命令运行容器:

代码片段
docker run -d \
    --name mcp-server \
    -p 25565:25565 \
    -v $(pwd)/mcp-data:/mcp \
    mcp-server:1.12

参数说明:
-d: 后台运行容器
--name: 为容器指定名称
-p: 端口映射(主机端口:容器端口)
-v: 数据卷挂载,持久化保存服务器数据

步骤五:验证服务器运行

检查容器是否正常运行:

代码片段
docker logs -f mcp-server

如果看到类似以下的输出,说明服务器已成功启动:

代码片段
[Server thread/INFO]: Done (3.123s)! For help, type "help" or "?"

MCP Server常用操作

进入运行中的容器执行命令

代码片段
docker exec -it mcp-server bash

停止服务器

代码片段
docker stop mcp-server

备份服务器数据

代码片段
docker cp mcp-server:/mcp ./mcp-backup-$(date +%Y%m%d)

Docker Compose方案(推荐)

对于更复杂的部署,建议使用docker-compose.yml

代码片段
version: '3'

services:
  mcp-server:
    image: mcp-server:1.12
    container_name: mcp-server
    ports:
      - "25565:25565"
    volumes:
      - ./mcp-data:/mcp
    restart: unless-stopped
    environment:
      - EULA=true   # Minecraft EULA自动接受(重要!)
      - MEMORY=2G   # JVM内存分配大小

networks:
 default:
   driver: bridge

然后使用以下命令启动:

代码片段
docker-compose up -d

MCP Server配置优化建议

  1. JVM参数调整

    代码片段
    environment:
      - JVM_OPTS=-Xms2G -Xmx4G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:G1MixedGCLiveThresholdPercent=35 -XX:+AlwaysPreTouch -XX:+ParallelRefProcEnabled 
    
  2. 定时备份

    代码片段
    volumes:
      # ...其他挂载...
      # /backups目录用于存放自动备份文件 
      # /data目录是实际服务器数据目录 
      # /scripts目录包含自定义脚本 
      # /mods目录包含所有mod文件 
      # /config目录包含所有配置文件 
      # /logs目录包含日志文件 
      # /world目录包含世界数据 
    
  3. 性能监控

    代码片段
    docker stats mcp-server --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
    

Troubleshooting常见问题解决指南

问题一: Minecraft EULA未接受导致服务器无法启动

解决方案:

docker-compose.yml中添加环境变量:

代码片段


environment:


 EULA: "TRUE"


或者在运行时添加参数:

代码片段


docker run ... -e EULA=TRUE ...





### **问题二**: Java内存不足导致崩溃




#### **解决方案**: 


调整JVM内存参数:




environment:


 MEMORY: "4G" # Java堆内存设置为4GB


 JVM_OPTS: "-Xms4G ..." # JVM参数设置


问题三: Mod冲突或加载失败

解决方案:

1.检查日志确定具体错误:

代码片段


docker logs mcp-server | grep ERROR


2.Mod应按正确顺序加载,可以尝试:

*删除冲突Mod

*更新Mod到兼容版本

*检查Forge版本兼容性

问题四: World文件夹权限问题

解决方案:

确保挂载卷有正确权限:

代码片段


chown $UID:$UID ./mounted_world_folder/


chmod a+rwx ./mounted_world_folder/


或者以root用户运行(不推荐):

代码片段


docker run ... --user root ...





### **问题五**: Port已被占用




#### **解决方案**: 


更改映射端口:




ports:


 "25566:25565" #主机25566映射到容器25565




或者停止占用端口的服务。

问题六: Gradle构建失败

解决方案:

清理缓存后重新构建:

*删除~/.gradle/caches

*删除项目中的.gradle文件夹

*重新执行./gradlew setup

*检查网络连接是否正常

问题七: Docker磁盘空间不足

解决方案:

清理无用资源:

代码片段


docker system prune --volumes --all --force




增加Docker存储空间限制。

通过以上步骤,你应该能够成功在Docker中运行一个稳定的MCP Server。如果在实践中遇到其他问题,欢迎在评论区留言讨论。

原创 高质量