【Minecraft】dockerを用いたMinecraftサーバの構築 #2

はじめに

前回のつづきです。前回はdockerで特に何も編集せずに実行していました。今回はバージョン変更やModの読み込みまでやります。

Windows10の環境でdockerからMinecraft forge 1.7.10 を起動する記事が見つからなかったので、いろんな記事の一部を集めながら試行錯誤しました。結構大変でしたw

実行環境

  • Windows10 Pro 1803 (Build 17134.950)
  • docker for Windows Desktop 19.03.1, build 74b1e89
  • Minecraft ランチャ― 2.1.5964
  • Minecraft 1.7.10
  • Forge 10.13.4.1614 + LiteLoader 1.7.10

その他、MOD等の導入方法は各自で調べてください。

お品書き

  1. docker-compose.yml の編集
  2. Minecraft環境のセットアップ
  3. Modの動作確認

1. docker-compose.yml の編集

前回ダウンロード(pull)したディレクトリ内での作業になります。 dockerを起動させるとき、docker-compose コマンドを用いて起動したほうが楽だったので、こちらのほうを編集します。デフォルトでは次のような設定になっています。

version: '3'
# Other docker-compose examples in /examples

services:
  minecraft:
    image: itzg/minecraft-server
    ports:
      - "25565:25565"
    volumes:
      - "mc:/data"
    environment:
      EULA: "TRUE"
      CONSOLE: "false"
      ENABLE_RCON: "true"
      RCON_PASSWORD: "testing"
      RCON_PORT: 28016
    restart: always
  rcon:
    image: itzg/rcon
    ports:
      - "4326:4326"
      - "4327:4327"
    volumes:
      - "rcon:/opt/rcon-web-admin/db"

volumes:
  mc:
  rcon:

このまま実行すると、最新バージョンがセットアップされるので対応していないMODが不具合を起こします。なので、バージョンを下げる必要があります。私はこのように変更しました。

version: '2'
services:
    minecraft-server:
        container_name: Takunology_Industrial
        image: itzg/minecraft-server
        ports:
            - "25565:25565"
        tty: true
        stdin_open: true
        restart: always
        volumes:
            - ./Version1.7.10/data:/data/
            - ./Version1.7.10/mods:/data/mods
        environment:
            EULA: "TRUE"
            VERSION: "1.7.10"
            TYPE: "FORGE"
            FORGEVERSION: "10.13.4.1614"

コンテナ名は私の名前と工業MODの組み合わせです。ここはお好きにどうぞ。imageはdockerの大元のディレクトリです。要は docker hub から pull するリポジトリ名です。ここからが大切で、volumesの部分がゲームディレクトリになります。私のファイル構成はこのようになっています。LiteLoaderが含まれていても、Forgeのバージョンのみで無事読み取るので大丈夫です。(結構苦戦しました。)

f:id:takunology:20190823053813p:plain

ゲームディレクトリはVersion1.7.10という名前にしました。ちなみにこの中にはdataとmodが入っています。ゲームディレクトリのコア部分はdataなので、このディレクトリを後に設定することになります。

さて、ディレクトリの作成などの準備ができたらコマンドを実行します。

docker-compose up -d

しかし、エラーが表示されました。

Creating network "minecraftserver_default" with the default driver
Creating Takunology_Industrial ... error

ERROR: for Takunology_Industrial  Cannot start service minecraft-server: b'driver failed programming external connectivity on endpoint Takunology_Industrial (47b5544221eec761ed75797bc9a67bbcaaa8b127f045707059292c2e31c97a9d): Error starting userland proxy: listen tcp 0.0.0.0:25565: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.'

ERROR: for minecraft-server  Cannot start service minecraft-server: b'driver failed programming external connectivity on endpoint Takunology_Industrial (47b5544221eec761ed75797bc9a67bbcaaa8b127f045707059292c2e31c97a9d): Error starting userland proxy: listen tcp 0.0.0.0:25565: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.'
ERROR: Encountered errors while bringing up the project.

こんな時は docker を再起動すれば解決すると、たくさんのサイトで書いてあったのでそうしてみましたが、ダメでした。仕方なくOSごと再起動してみました。

PS E:\Minecraft\docker\MinecraftServer> docker-compose up -d
Creating network "minecraftserver_default" with the default driver
Creating Takunology_Industrial ... done
PS E:\Minecraft\docker\MinecraftServer> docker-compose ps
The system cannot find the path specified.
        Name            Command      State                      Ports
------------------------------------------------------------------------------------
Takunology_Industrial   /start    Up (healthy)   0.0.0.0:25565->25565/tcp, 25575/tcp

成功です。ps オプションを付けると起動中のコンテナが表示されます。しばらく待つとゲームディレクトリにサーバ設定ファイル等のデータが生成されます。私はこのようになりました。

f:id:takunology:20190823061707p:plain

これでForge を含む Minecraft 1.7.10 のサーバを構築することができました。

2. Minecraft環境のセットアップ

昔に比べてだいぶUIがきれいになり、逆に混乱してしまいますね。バージョンごとの作成には "起動構成"のタブをクリックし、左上の"新規作成"をクリックします。起動構成はこのようにしました。

f:id:takunology:20190823063132p:plain

バージョンは合わせてください。ゲームディレクトリは先ほど、dockerで生成されたサーバファイル等のあるディレクトリを選択してください。今回の例では ~/Version1.7.10/data となります。

設定できたら起動してみましょう。

あ、ちなみにサーバログが見たいときは次のようなコマンドを投げるとリアルタイムで見ることができます。

docker-compose logs -f

起動後の画面です。しっかりとforgeが読み込まれています。

f:id:takunology:20190823063706p:plain

3. Modの動作確認

あとは自分の好きなMODを入れるだけです。MODはゲームディレクトリの中のmodsというディレクトリに入れます。つまりは ~/Version1.7.10/data/mods の中に入れるわけです。

MODを入れる前にサーバを一度停止します。

> docker-compose down
Stopping Takunology_Industrial ... done
Removing Takunology_Industrial ... done
Removing network minecraftserver_default

MODを入れたらもう一度サーバを起動し、Minecraftも起動します。

f:id:takunology:20190823064318p:plain

良い感じです。46個のmodを読み込んでくれました。

f:id:takunology:20190823064434p:plain

ではサーバを追加してみます。サーバは前回と同様にローカルホストで設定します。

f:id:takunology:20190823064615p:plain

f:id:takunology:20190823064645p:plain

無事にサーバ接続されていますね。実際にログインしてみます。

f:id:takunology:20190823064842p:plain

夜ですね(笑) ちなみにログはこんな感じです。

f:id:takunology:20190823065155p:plain

journeyMAPを読み込んでいるあたり、MOD等は問題なく動作してそうです。アイテムも確認したいところですが、クリエイティブにするためのコマンドを実行する権限がないので、付与します。

権限を付与するためには ~/Version1.7.10/data に入っている ops.json ファイルの中を編集します。デフォルトではこのようになっています。

[]

これを次のように変更します。

[
  {
    "uuid": "自-主-規-制-d6f510532f8b",
    "name": "プレイヤー名",
    "level": 4
  }
]

と設定します。uuid は固有IDなので各自で調べるなどしてください。権限は "level" で変更できます。4が最大です。できたら保存してサーバとMinecraftを再度起動します。

一通り動かしてみた動画です。確認してみてください。MODとコマンドが扱えれば問題ないです。

www.youtube.com

おわりに

ここまで来るのに結構時間がかかりましたが、Win10 & Forge1.7.10 & docker という組み合わせでやっている人はなかなかいないのではと思います。サーバ自体Linux系で構築したほうがコストも管理もしやすいです。

次回は外部からコマンドを実行できるかやってみたいと思います。イメージとしては "くらでべ" のマイクラ自動化です。そこではクラウド上でやっていますが、私はローカルで挑戦してみようと思います。C#でやりたいのですが、RCONを導入すればできるとの記事が...

クラウドデベロッパーちゃんねる(くらでべ)

Microsoftの社員の皆様が技術系の講座を行っているチャンネルです。

www.youtube.com

参考までにどうぞ

ビルドしていないので、各自の環境で docker-compose.yml を書きかえて再度ビルドしてください。記事に書いたようなファイルが生成されます。

github.com