You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Minecraft服务器遇Jar文件访问失败问题求助

问题:Docker化Minecraft服务器时无法找到server.jar,绑定挂载目录无文件

环境与目录结构

VPS用户为opc,主目录下live目录结构:

  • live/docker/Dockerfile
  • live/docker/server.properties
  • live/docker/eula.txt
  • live/docker-compose.yml

server.properties和eula.txt为默认生成文件,主机已提前创建./minecraft-server绑定挂载目录。

Dockerfile内容

FROM openjdk:21-slim as base

RUN apt-get update
RUN apt-get install -y wget
RUN mkdir -p /opt/minecraft-server

WORKDIR /opt/minecraft-server

RUN wget https://api.papermc.io/v2/projects/paper/versions/1.20.2/builds/318/downloads/paper-1.20.2-318.jar -O server.jar

COPY eula.txt /opt/minecraft-server/eula.txt
COPY server.properties /opt/minecraft-server/server.properties

EXPOSE 25565
EXPOSE 25575

CMD ["/bin/sh"]

docker-compose.yml内容

version: "3.8"
services:
  minecraft-server:
    build:
      context: "./docker/minecraft-server"
      dockerfile: "Dockerfile"
    working_dir: "/opt/minecraft-server/"
    command: "java -Xmx1024M -Xms1024M -jar server.jar nogui"
    container_name: "minecraft-server"
    ports:
      - "25565:25565"
      - "25575:25575"
    volumes:
      - "./minecraft-server/:/opt/minecraft-server/"

操作步骤与错误信息

执行命令:

docker compose build minecraft-server
docker compose run -d minecraft-server

容器启动后立即崩溃,错误输出:

[+] Running 1/0
 ✔ Container minecraft-server  Created                                                                                                   0.0s 
Attaching to minecraft-server
minecraft-server  | Error: Unable to access jarfile server.jar
minecraft-server exited with code 1

解决方案

1. 绑定挂载覆盖容器内文件(核心问题)

当主机目录./minecraft-server/挂载到容器/opt/minecraft-server/时,容器内该目录的所有文件(包括Dockerfile中下载的server.jar、复制的配置文件)会被主机目录内容完全覆盖。由于主机目录为空,容器内自然找不到server.jar。

解决办法:

  • 方案一:仅挂载需要持久化的子目录
    修改docker-compose.yml的volumes配置,只挂载世界文件、日志、插件这类需要持久化的目录,保留容器内的核心文件:
volumes:
  - "./minecraft-server/worlds:/opt/minecraft-server/worlds"
  - "./minecraft-server/logs:/opt/minecraft-server/logs"
  - "./minecraft-server/plugins:/opt/minecraft-server/plugins"
  • 方案二:先初始化主机目录再挂载
    若必须挂载整个目录,先把容器内的核心文件复制到主机目录:
  1. 临时启动容器不挂载目录:
docker compose run --rm minecraft-server bash
  1. 在主机live/minecraft-server目录下执行,将容器内文件同步到主机:
docker exec -i <容器ID> tar -cf - . | tar -xf -

完成后再启动带挂载的容器。

2. 修复Docker构建上下文路径错误

docker-compose.yml中build.context设置为./docker/minecraft-server,但实际Dockerfile和配置文件都在live/docker/下,导致构建时COPY命令找不到文件。修改build配置:

build:
  context: "./docker"
  dockerfile: "Dockerfile"

3. 优化Dockerfile(可选)

合并冗余命令,减少镜像层数,同时规范CMD格式:

FROM openjdk:21-slim

RUN apt-get update && apt-get install -y --no-install-recommends wget \
    && rm -rf /var/lib/apt/lists/* \
    && mkdir -p /opt/minecraft-server

WORKDIR /opt/minecraft-server

RUN wget https://api.papermc.io/v2/projects/paper/versions/1.20.2/builds/318/downloads/paper-1.20.2-318.jar -O server.jar

COPY eula.txt server.properties ./

EXPOSE 25565 25575

CMD ["java", "-Xmx1024M", "-Xms1024M", "-jar", "server.jar", "nogui"]

内容的提问来源于stack exchange,提问作者Zoumath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:35:33