Идеальный 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).
Если сервер работает в консоли, но недоступен извне, проверьте два фактора:
- IP Forwarding: Убедитесь, что ядро Linux разрешает пересылку пакетов. В файле
/etc/sysctl.confпараметрnet.ipv4.ip_forwardдолжен быть равен1. - Чистота PREROUTING: Любые ручные правила в
iptables -t nat -L PREROUTING, перехватывающие трафик до цепочкиDOCKER, «убьют» подключение (особенно опасны правила, принудительно перенаправляющие порты 80, 443 или 25565 на неверные внутренние IP).
Если вносите изменения в сетевые правила хоста, всегда выполняйте sudo systemctl restart docker, чтобы демон заново построил корректные маршруты к контейнерам. А благодаря параметру restart: unless-stopped, ваш сервер автоматически вернется в онлайн.
Комментариев нет