はじめに
Dockerfileを作成していると、VS CodeやDocker Desktopで次のような警告が表示されることがあります。
1 critical and 8 high vulnerabilities
Current image vulnerabilities: 1C 8H 26M 6L
初めて見たとき、次のように不安になりました
- エラーなの?
- コンテナは動かないの?
- 何か設定を間違えた?
この記事では、この警告の意味と初心者でもできる対処法をわかりやすく解説します。
まず結論
この警告は
「そのDockerイメージに脆弱性(セキュリティの弱点)が含まれているよ」
という意味です。
ただし、
- コンテナが起動しなくなるエラーではありません
- Dockerfileの書き方が間違っているわけでもありません
あくまで、
「セキュリティ上の問題が見つかっているので確認してください」
という注意メッセージです。
表示の意味を理解
1 critical and 8 high vulnerabilities
Current image vulnerabilities: 1C 8H 26M 6L
それぞれの意味は以下の通りです。
| 表記 | 意味 |
|---|---|
| Critical (C) | 超危険(すぐ対応推奨) |
| High (H) | 危険 |
| Medium (M) | 中程度 |
| Low (L) | 軽微 |
今回の例では、
- Critical:1件
- High:8件
- Medium:26件
- Low:6件
の脆弱性が検出されています。
なぜ脆弱性が見つかるのか?
Dockerでは通常、自分でOSから作るのではなく、既存のイメージを利用します。
例えば次のような記述です。
FROM ruby:3.2.2-alpine
この ruby:3.2.2-alpine はDocker Hubで公開されている公式イメージになります。
しかし、この中には以下のものが含まれています。
- 古いパッケージ
- 修正前のライブラリ
- 既知のセキュリティ問題
つまり、
自分のコードが原因ではなく、土台として利用しているイメージ側に問題が見つかることがある
というコトになります
どうすればいいのか?
方法①:新しいバージョンを使う(おすすめ)
まず試したいのがイメージの更新です
docker pull ruby:3.2.2-alpine
最新の修正版が公開されている場合は、脆弱性が減ることがあります。
方法② 新しいタグを利用する
FROM ruby:3.2-alpine
または、
FROM ruby:3.3-alpine
これらに変更する=セキュリティ修正が含まれているかもしれない新しいバージョンにすることで、脆弱性が減る
⚠️アプリとの互換性確認は必要
方法③ ベースイメージを見直す
例えば、以下のようにのようにAlpine版以外を利用する選択肢もあります。
FROM ruby:3.2
VS Codeはなぜ警告を出しているのか?
VS CodeのDocker拡張機能や脆弱性スキャナーは、Dockerイメージを自動で分析し、以下を検出してくれます
- 既知の脆弱性
- セキュリティリスク
- 古いパッケージ
今回の警告は
VS Codeが安全性向上のために教えてくれている便利な機能
「脆弱性ゼロ」を目指すべきか?
新しい脆弱性は日々発見されているため
脆弱性ゼロのDockerイメージを維持するのは簡単ではないそうです。
なので考え方としては以下がおすすめ
そのため一般的には、
- Critical → 優先的に対応
- High → できるだけ対応
- Medium → 状況に応じて判断
- Low → 影響を確認して判断
まとめ
今回の警告は、
「Dockerイメージに既知の脆弱性が含まれています」
というお知らせでした。
ポイントを整理すると、
- エラーではない
- コンテナは動作する
- ベースイメージに脆弱性が含まれている可能性がある
- イメージの更新で改善する場合がある
- CriticalやHighは内容を確認する
Dockerを学び始めたばかりの頃は警告が出ると不安になりますが、まずは意味を理解することが大切です。
私自身も最初は「何か設定を間違えたのかな?」と思いましたが、実際にはDockerが安全性のために教えてくれている情報でした。
同じ警告が表示されて困っている方の参考になれば幸いです。
