前回の記事で今回作成した、l4d2 dedicated serverを構築用のDockerfileの悪い点を示しました。
最後に、Dckerfileを作成する過程で躓いた点2つ(些細なことですが)を残します。
##1. Docker Toolboxのdefaultマシンのディスク容量が足りなくなった
私が使用していた環境はDocker Toolbox (version 19.03.1)なのですが、docker build
をする際にdockerのディスク容量が足りないことを示すno space left on device
が出てしまいました。
類似した症状に関する記事を参考にdocker system prune -a --volumes
で不要なコンテナ・ネットワーク・イメージ・ボリュームを一括削除してみましたが、それでも解決しませんでした。
作成しようとしているコンテナイメージは前回の記事で述べていたように10GB程度と大きいですが、Docker Toolboxのdefaultマシンのディスク容量は20GB(disk.vmdkは19.53GB)あるため、ディスク容量に問題はないと思い込んでおりました。
しかし、(想像ですが)今回のコンテナは大半の容量をdedicated serverが占めているため、仮にdocker build
がこれをイメージ内でコピーするような動作をしているとしたら、ディスク容量が不足している可能性もあると思い、一回defaultマシンを削除してディスク容量を増やして再作成しました。
# defaultマシンを削除
$ docker-machine rm default
About to remove default
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed default
# defaultVM(50GB)を作成
$ docker-machine create -d virtualbox --virtualbox-disk-size "50000" default
...
この上で再度ビルドしたところ、問題無く動作することを確認出来ました。
ディスク容量が足りないわけではないだろうという思い込みで躓いておりました。
##2. GCEのポート設定が上手くできているのか分からなかった
これはGCE側の仕様というよりはnmap
の仕様かと思うのですが、ファイアウォール設定をした後にちゃんとポート設定が出来ているのかを確認するため、nmap
を使ってポートスキャンをしました。すると、5桁以降のポートはスキャン対象から除かれるようで、それに気づかず躓いてしまいました。
(この際、実際にファイアウォール設定をしててもサーバーに接続できない事象が発生していたため、勝手にポートの設定が出来ていないものとばかり思いこんでいたのですが、実態はdocker run
の際にUDPの27015をポートフォワードし忘れていたことに起因しており、このことに気が付くのに時間がかかってしまいました……。)
上記を実際に見ていきます。例えば、ファイアウォール設定で22(SSH), 443(HTTPS), 8080, 9000, 10000, 11000, 27015(l4d2 dedicated serverのデフォルト), 27016を許可した上で、nmap
でオプションをつけずにスキャンをすると下記のようになります。
xxx@instance-1:~$ nmap 34.84.27.167
...
Not shown: 994 filtered ports
PORT STATE SERVICE
22/tcp open ssh
443/tcp closed https
3389/tcp closed ms-wbt-server
8080/tcp closed http-proxy
9000/tcp closed cslistener
10000/tcp closed snet-sensor-mgmt
Nmap done: 1 IP address (1 host up) scanned in 4.60 seconds
確かに11000以降はスキャンされていません。私はこれを勝手に10000以降は許可できていないと勘違いして混乱してしまいました。
しかし(当然ですが)、例えば上記の条件の下スキャンするポートを27015-27018に制限すると、下記のように27015と27016はclosed(受信待機中のアプリケーションはないが、プローブは届いている)となっており(当然17, 18はプローブが到達していない)、しっかり機能していることが分かります。
xxx@instance-1:~$ nmap -p 27015-27018 34.84.27.167
PORT STATE SERVICE
27015/tcp closed unknown
27016/tcp closed unknown
27017/tcp filtered mongod
27018/tcp filtered mongod
Nmap done: 1 IP address (1 host up) scanned in 1.32 seconds
##まとめ
蓋を開けてみるとなんてことない話かもしれませんが、実際こういうところで躓いてしまったので、今後のために残しておきます。
これで「left4dead2サーバー用のDockerイメージを作り、GCE上で動かしてみた」の一連の話は全てとなります。今後はまた勉強を進め、本件のバージョンアップ版やその他の新しいアウトプットが出来たら積極的に記事化していきたいと思います。
今回も最後まで読んでいただきありがとうございます。