Windows Server 2012で起動時にVirtualBoxのVMを立ち上げる方法

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を設定する
  • ログオン後すぐにロックするバッチをタスクスケジューラに設定する
[/box04]

Windows Serverっていろいろ大変ですね。