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"
- 方案二:先初始化主机目录再挂载
若必须挂载整个目录,先把容器内的核心文件复制到主机目录:
- 临时启动容器不挂载目录:
docker compose run --rm minecraft-server bash
- 在主机
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
相关产品推荐
相关产品推荐

