
Docker公式のドキュメントによると、Docker Engine 29.8.0がリリースされました。今回のアップデートでは、コンテナプロセスとヘルスチェックに対する新しい「--umask」フラグの導入や、AppArmorのデフォルトプロファイルのカスタマイズ対応に加えて、Swarmのサービス検出やゴシップネットワークに関する不具合の修正も含まれています。LaravelやWordPressをDockerで動かしている個人開発者の皆さんにとっても、無視できない変更点がいくつかあるので、まずは今回のポイントを整理していきましょう。
コンテナ内のファイル権限を制御する新しい仕組み
まず注目したいのが、新たに導入された「--umask」フラグです。これまでのDockerでは、コンテナ内で作られるファイルやディレクトリのパーミッションが、内部のデフォルトumaskに依存していて、「ローカルでは書き込めるのに、本番のボリュームにマウントしたら権限エラーになる」という現象に遭遇した方もいらっしゃったのではないでしょうか。--umaskを使うと、コンテナプロセスやヘルスチェックに対して明示的にumaskを指定できるため、こうした「環境ごとにパーミッションがブレる」問題への再現性が高まります。
同時に、AppArmorのデフォルトプロファイルがdaemon再起動時に更新されない不具合も修正されています。AppArmorはSELinuxと並んでコンテナのアクセス制御を支える仕組みなので、みなさんがUbuntu環境で動かしているLaravelやWordPressのコンテナでは、裏側でこのプロファイルがきちんと更新されているかを一度見直しておくと安心です。
ただし、現時点では--umaskフラグの具体的な挙動や、DockerfileやComposeとの組み合わせについて、公式ドキュメントの記述はまだ限られています。いきなり本番設定に取り入れるのではなく、手元で小さなコンテナを一つ立てて、docker exec -it ... shの中で実際にファイルを作ってみるところから試してみましょう。
docker cp関連の脆弱性とRootlessネットワークの変更
もうひとつ、ぜひ後回しにしないでいただきたいのがセキュリティ修正です。今回のリリースノートでは、「docker cp」に関連する複数のCVEが報告されています。具体的には、コンテナ内のプロセスからホストのルート権限で任意のバイナリを実行できてしまったり、バインドマウントを任意のパスへリダイレクトできてしまったりする可能性があった、とされています。ローカル開発であっても、コンテナとホスト間でファイルをコピーする操作は日常茶飯事ですから、仕組みとして「コンテナがホストの権限をどこまで握れるのか」を一度意識しておくことは、後々の運用にも効いてきます。Docker Engineを29.8.0未満のまま運用している方は、Docker DesktopやLinuxのパッケージマネージャから、できるだけ早くバージョン引き上げを検討してみてください。
加えて、Rootlessモードでの既定ネットワークドライバが「gvisor-tap-vsock」に変更され、これまで既定だった「slirp4netns」はDockerのパッケージ経由ではインストールされなくなりました。個人開発でVPSや自宅サーバをRootless Dockerで運用している方、docker-compose.ymlの中でネットワーク設定を明示的に書いている方は、コンテナ同士の通信や名前解決が従来どおり動くか、一度docker compose upで立ち上げて確認しておくと、つまずきを先回りできます。
アップデート時の注意点と、あと一歩だけ先回りする確認
最後に、少し気をつけていただきたい落とし穴です。今回のリリースノートには、Rootless環境でのセキュリティ強化によって、32ビットプログラムやi386イメージの一部が正しく動作しなくなる可能性があると記載されています。具体例としてSteamCMDやWineベースのワークロードが挙げられています。普段はLaravelやWordPressを触っているという方でも、個人開発の幅を広げようとゲームサーバや古いパッケージをDockerで動かしている場合、アップデート直後にコンテナが起動しなくなるといった現象が起き得ます。該当するものがある方は、docker logsでエラーメッセージを丁寧に追ってみてください。
ここまでを踏まえて、アップデート後にみなさんが確認しておきたい手順を、最後にまとめておきます。まずはdocker versionでServer側のバージョンが29.8.0以降になっていることを確認し、その次にプロジェクトのdocker-compose.ymlやシェルスクリプトの中で「docker cp」やRootlessネットワーク周りに触れている箇所がないかをチェックしましょう。普段使いのLaravelアプリやWordPressサイトのコンテナを一度立ち上げ、ファイル書き込みとヘルスチェックが想定どおりに動くか、落ち着いて一つずつ確かめていってください。
今回のリリースはマイナーバージョンアップに見えて、ネットワークドライバやファイル権限の扱いといった仕組みの部分に手が届いています。「とりあえずバージョンを上げたから大丈夫」と流してしまうと、後から再現性の低い不具合に悩まされることになります。みなさんの環境でも、なぜこの変更が入ったのかという前提を押さえながら、少しずつ整えていきましょう。
関連記事: Docker・インフラ構築についてよくある質問.