Идеальный Minecraft-сервер в Docker: Готовый конфиг и решение сетевых проблем

Идеальный Minecraft-сервер в Docker: Готовый конфиг и решение сетевых проблем

Развернуть сервер Minecraft через Docker — это самый изящный способ управлять проектом. Контейнер изолирует Java-окружение от остальной системы, позволяет менять версию игры одной строчкой кода и легко соседствует с веб-сервирами (например, с Nginx).

Основой для нашей сборки послужит образ itzg/minecraft-server — золотой стандарт в сообществе, который берет на себя всю рутину по скачиванию ядер, настройке Java и принятию лицензий.

Ниже представлено готовое руководство по запуску сервера на ядре NeoForge (версия 1.21.1) с оптимизацией производительности.

0. Подготовка сервера (Пререквизиты)

Перед тем как писать конфигурацию, убедитесь, что ваша площадка готова к запуску. Для комфортной работы вам потребуется:

  • Операционная система: Любой современный дистрибутив Linux (рекомендуется Ubuntu 22.04/24.04 или Debian). Docker работает и на Windows/macOS, но для круглосуточного игрового сервера Linux — единственный правильный выбор.
  • Установленный Docker и Docker Compose: Это фундамент нашей сборки. Самый быстрый способ установить свежую версию на чистый Linux — использовать официальный скрипт: curl -fsSL [https://get.docker.com](https://get.docker.com) -o get-docker.sh && sudo sh get-docker.sh.
  • Ресурсы оборудования (Hardware): Поскольку в конфигурации мы выделяем 8 ГБ оперативной памяти только под нужды Java, сам сервер должен иметь «на борту» минимум 10–12 ГБ ОЗУ (чтобы оставить память для ОС и других контейнеров). Процессор желательно с высокой производительностью на одно ядро (Minecraft всё ещё сильно зависит от одного потока).
  • Сеть: Белый (публичный) IP-адрес у вашего сервера, чтобы игроки могли подключаться из интернета, и открытый порт 25565 (TCP/UDP) в настройках файрвола вашего хостинг-провайдера.

1. Подготовка конфигурации (docker-compose.yml)

Создайте папку для вашего сервера, а внутри нее — файл docker-compose.yml. Скопируйте в него следующий код:YAML

services:
  mc:
    image: itzg/minecraft-server:java21
    container_name: mc_server
    # Критически важно для выживания сервера после перезагрузок ОС:
    restart: unless-stopped
    ports:
      - "25565:25565" # Основной порт игры
      - "25575:25575" # Порт RCON (опционально)
    environment:
      EULA: "TRUE"
      TYPE: "NEOFORGE"
      VERSION: "1.21.1"
      ONLINE_MODE: "FALSE" # Измените на TRUE, если играете только с лицензии
      MEMORY: "8G"
      USE_AIKAR_FLAGS: "true"
      ENABLE_RCON: "true"
      RCON_PASSWORD: "[СЕКРЕТНЫЙ_ПАРОЛЬ]"
      RCON_PORT: "25575"
      OPS: |
        [ВАШ_ИГРОВОЙ_НИКНЕЙМ]
    volumes:
      - ./.data/minecraft:/data

Отказ от кастомного Entrypoint: В ручном написании bash-скриптов для запуска (вроде entrypoint: ["/bin/bash", "-c", ...]) при использовании официального образа itzg нет необходимости. Переменная EULA: "TRUE" сама создает нужный файл, а скрипты запуска генерируются автоматически в зависимости от выбранного TYPE. Чистый конфиг работает стабильнее.

2. Разбор ключевых параметров

Секция environment — это пульт управления вашим сервером. Вот за что отвечают главные переменные:

  • TYPE: "NEOFORGE": Docker сам скачает нужный установщик NeoForge, установит библиотеки модов и подготовит ядро. Вы можете поменять это значение на PAPER, FABRIC или VANILLA, и при следующем запуске сервер пересоберется под новое ядро.
  • MEMORY: "8G": Жесткий лимит оперативной памяти для Java (-Xmx). Для серверов с модами версии 1.21+ рекомендуется выделять не менее 6–8 ГБ.
  • USE_AIKAR_FLAGS: "true": Одна из самых важных настроек. Она автоматически применяет флаги Айкара (Aikar’s flags) — набор параметров сборщика мусора (Garbage Collector) в Java, которые устраняют микрофризы (лаг-спайки) при генерации чанков.
  • OPS: Список никнеймов (каждый с новой строки), которым будут выданы права администратора при старте.

3. Сохранение данных (Volumes)

Строка volumes: - ./.data/minecraft:/data связывает папку внутри контейнера с директорией /.data/minecraft на вашем сервере.

Именно здесь после первого запуска появятся папки mods, world, config и файл server.properties.

Чтобы установить моды, вам не нужно заходить внутрь контейнера. Достаточно закинуть .jar файлы в папку /.data/minecraft/mods на вашем хосте и перезапустить сервер.

4. Запуск и управление

Чтобы вдохнуть в сервер жизнь, выполните в директории с файлом docker-compose.yml команду:Bash

docker compose up -d

Первый запуск займет несколько минут: контейнер скачает Java 21, установщик NeoForge, распакует библиотеки и сгенерирует мир.

Полезные команды для администрирования:

ДействиеКоманда
Смотреть консоль (логи)docker logs -f mc_server (Ctrl+C для выхода)
Ввести команду в консольdocker exec -i mc_server rcon-cli (затем пишите команду, например say Hello)
Перезагрузить серверdocker compose restart mc
Остановить серверdocker compose down

5. Главный подводный камень: Сеть и Firewall

Как показывает практика, самая частая причина недоступности сервера — это конфликты маршрутизации на уровне Linux. Docker пробрасывает порты через iptables (таблица NAT).

Если сервер работает в консоли, но недоступен извне, проверьте два фактора:

  1. IP Forwarding: Убедитесь, что ядро Linux разрешает пересылку пакетов. В файле /etc/sysctl.conf параметр net.ipv4.ip_forward должен быть равен 1.
  2. Чистота PREROUTING: Любые ручные правила в iptables -t nat -L PREROUTING, перехватывающие трафик до цепочки DOCKER, «убьют» подключение (особенно опасны правила, принудительно перенаправляющие порты 80, 443 или 25565 на неверные внутренние IP).

Если вносите изменения в сетевые правила хоста, всегда выполняйте sudo systemctl restart docker, чтобы демон заново построил корректные маршруты к контейнерам. А благодаря параметру restart: unless-stopped, ваш сервер автоматически вернется в онлайн.

Комментариев нет

Добавить комментарий