OhMyMCOhMyMC

数据目录

15 次阅读

容器管理的所有 Minecraft 数据均位于容器内部的 /data 路径下,目录结构示意如下:

重要

容器路径 /data 默认声明为数据卷。若未手动挂载,Docker 将自动创建匿名卷。该匿名卷会随容器删除而销毁。

将数据目录挂载到宿主机

推荐使用 绑定挂载 ,并使用 -v 参数将宿主机目录映射到容器的 /data 目录中,在下面的示例中,路径 /home/user/minecraft-data 必须是宿主机上的目录:

-v /home/user/minecraft-data:/data
   ------------------------- -----
    |                         |
    |                         +-- 必须为 /data
    |
    +-- 替换为宿主机目录路径

挂载后,可以随时停止服务器,直接修改宿主机目录下的配置文件,重启后即可生效。

Rootless, Podman, SELinux, AppArmor 配置

使用 Rootless 容器(如 Podman)或启用 SELinux/AppArmor 的系统时,需在卷映射后添加 :Z 标识:

/home/user/minecraft-data:/data:Z

使用 docker compose 配置相对路径更便捷,以下示例会自动创建/挂载当前目录下的 minecraft-data 目录

docker-compose.yml
services:
  mc:
    image: itzg/minecraft-server
    ports:
      - 25565:25565
    environment:
      EULA: "TRUE"
    tty: true
    stdin_open: true
    restart: unless-stopped
    volumes:
      # 挂载 compose 文件所在目录的 minecraft-data 目录,若没有会自己创建。
      - ./minecraft-data:/data

匿名卷转命名卷操作

若初始运行未使用 -v 参数挂载,Docker 会创建一个匿名数据卷,你可通过以下步骤将匿名卷数据迁移至命名卷。

前提条件

假设原容器命名为 “mc”,请根据实际情况调整容器标识。

操作步骤:

  1. 停止原容器:
docker stop mc
  1. 使用临时容器将匿名卷的内容复制到命名卷中
docker run --rm --volumes-from mc -v mc:/new alpine cp -avT /data /new
  1. 使用命名卷重新创建容器:
docker run -d -it --name mc-new -v mc:/data -p 25565:25565 -e EULA=TRUE -e MEMORY=2G itzg/minecraft-server

查找匿名卷路径

执行以下命令查看匿名卷在宿主机上的装载位置,命令中输出的 Source 就是此位置。

docker inspect -f "{{json .Mounts}}" CONTAINER_NAME_OR_ID

Windows 用户注意

WSL 环境下匿名卷存储路径为:\\wsl$\docker-desktop-data\data\docker\volumes

最后更新于