説明
Dockerfile の EXPOSE 22 は、イメージがそのポートを使うことを示すメタデータです。SSH サーバーの起動やホスト側のポート公開は行いません。ただし、-P などの自動公開機能は EXPOSE の情報を使用できます。
SSH サービスが実際に動作し外部から到達できる場合は、認証とアクセス範囲を確認してください。EXPOSE を削除しても、明示的なポートマッピングや他のネットワーク経路は遮断されません。
想定される影響
- 不要なポート宣言と自動公開が組み合わさると、意図しないアクセス経路ができる場合があります。
- 到達可能な SSH サービスの認証やソフトウェアに弱点があると、コンテナーが侵害されるおそれがあります。
対処方法
- 不要な EXPOSE 22 を削除し、稼働サービス、実際のポートマッピング、ファイアウォールを併せて確認してください。
- 管理にはアクセス制御されたコマンド実行・ログ機能を検討してください。SSH が必要な場合は、信頼できる管理経路と強固な認証に限定してください。
例
ポート宣言だけを比較します。EXPOSE 22 を追加しても、Nginx イメージに SSH サーバーが作られるわけではありません。
変更前
dockerfile
FROM nginx:1.27-alpine
EXPOSE 80 22
CMD ["nginx", "-g", "daemon off;"]
変更後
dockerfile
FROM nginx:1.27-alpine
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
補足:
- 変更前: 80 と 22 を宣言します。実際の公開とサービスの稼働は別の設定によります。
- 変更後: 22 の宣言を削除します。明示的なポート公開やネットワークアクセスを遮断する設定ではありません。