はじめに
Dockerを使えばWindowsかLinuxかは関係ないと思っていた時期が僕にもありました。
OSによる挙動の違いはともかくとして、コンテナ化の方法によって差異が生じるみたいです。
Windowsでコンテナを作成するアプローチは大きく2種類あります。Hyper-Vを使う方法とWindowsのプロセス分離を使う方法です。詳細は割愛しますが、両者ではDocker(composeだけかもしれないけど)の挙動が微妙に違うらしく、再起動設定周りでハマりました。
やりたいこと
Windows Serverコンテナでdocker-composeの再起動設定を有効にする。
環境
OS:Windows Server 2019 Datacenter
問題
マシン起動時にコンテナ立ち上げの有無を設定できるrestartオプションがDockerにはありますが、Linux環境で動作したdocker-compose.ymlをそのままWindows Serverコンテナに移植してもうまく再起動できませんでした。
原因
起動時と再起動時で、Docker周辺の動作状況を確認していたところ、docker-compose起動時に有効になるデフォルトネットワークが、再起動時に消失していることが判明しました。
対策
networksの設定をnatのexternalで作成すれば解決しました。
version: '3.5'
networks:
default:
external:
name: "nat"
services:
hoge:
build:
context: .
dockerfile: ./hoge/Dockerfile
container_name: hoge
restart: always
command: powershell
stdin_open: true
volumes:
- .\hoge:C:\hogehoge
最後に
困ったらマイクロソフトの公式ドキュメントを見るのが一番確実ですね。
注意および免責事項
本記事の内容はあくまで私個人の見解であり、所属する組織の公式見解ではありません。
本記事の内容を実施し、利用者および第三者にトラブルが発生しても、筆者および所属組織は一切の責任を負いかねます。