Windows Serverを起動したときにVirutalBoxのVMが自動で立ち上がるようにしたい
Windows Server 2012 r2でdockerを利用するためにVirtualBoxを利用しています。
このVirtualBox上のVMにDocker環境を構築しているわけですが、サーバの電源をつけただけでVMも立ち上がってコンテナも起動されるようにしたいわけです。
サーバを立ち上げたときにvm立ち上げを自動で行う。
VirtualBoxのVMを立ち上げるバッチファイルを作成する
タスクスケジューラにVirtualBoxのVMを立ち上げるバッチを仕込みます。c:\Program Files\Oracle\VirtualBox
にVirtualBoxがインストールされているとします。
- startVB.bat
"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm "default" --type headless
こいつをタスクスケジューラに設定します。
- パラメータ解説
"default"
- ここに起動したいVirtualBoxのVM名を設定します。
-type headless
- ヘッドレスモードで起動する。このパラメータがないとウィンドウが開いてしまうので邪魔です。特に必要ない場合はヘッドレスモードで起動しましょう。
タスクスケジューラにバッチを自動実行するように設定する
失敗例:システム起動時に契機を設定
これは失敗例です。
こうした結果、Docker Containerが正常に起動しないものがありました。
私の場合、gitlabがうまく起動しないという不具合に見舞われました。
調べてみると、
Docker Machineでdocker container ps
した結果、gitlabがunhealthyに・・・
- コマンド実行結果
$ docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c75f4f5dc0a2 gitlab/gitlab-ce:latest "/assets/wrapper" 4 hours ago Up 12 minutes (unhealthy) 443/tcp, 0.0.0.0:10022->22/tcp, 0.0 .0.0:10080->80/tcp gitlab 40b0145dbf80 mattermost/mattermost-preview "/bin/sh -c ./docker" 8 days ago Up 12 minutes 3306/tcp, 33060/tcp, 0.0.0.0:8065->8 065/tcp mattermost-preview
ログオンしていないことが原因か、システム起動時に即VMをたちあげたことが原因か・・どちらにせようまくいかないので、起動方法を変えることにしました。
成功例:タスクスケジューラの起動契機をadminログオンをトリガにし、遅延を1分に設定
いろいろ試した結果採用したのは、「VirtualBoxのスケジューラをadminログオンをトリガに遅延を1分に設定」というものでした。
また、サーバを立ち上げた際にログオンを自動で行うためにautologonを使用しました。
起動時に自動的にログオンした状態になることがから、セキュリティ上とてもよろしくない状態なので、ログオンしたら即ロックするようにタスクスケジューラにタスクを追加しておきましょう!
ログオン後自動でロックする方法
以下のコマンドを実行するバッチファイルを作成してタスクスケジューラに追加しましょう。起動契機は、任意のユーザのログオン後です。(VirtualBoxのバッチに1行追加してVM起動と同時にロックするようにしても良いかもしれんません。)
- lock.bat
rundll32.exe user32.dll,LockWorkStation
これで起動後すぐにログオンし、ログオン後すぐにロックされるので安心できます。
要点まとめ
要点をまとめます。Windows Serverの起動時にVirtualBoxのVMを立ち上げる方法は以下の3点がポイントです。
[box04 title=”要点まとめ”]- ログオン時にVirtualBox上のVMを起動するバッチをタスクスケジューラに設定する
- サーバ起動時に自動的にログオンされるようにautologonを設定する
- ログオン後すぐにロックするバッチをタスクスケジューラに設定する
Windows Serverっていろいろ大変ですね。