DebianのDockerはポート80にバインドできません。

DebianのDockerはポート80にバインドできません。

私はDebian 11でDockerを実行しています。 Nginxコンテナをデプロイしたが他のプロセスでポート80を使用していない場合でも、ポート80にバインドできません。 Dockerをrootとして実行してみました。

これはコマンドです:docker run -d -p 80:80 nginx:alpine

コンテナログは次のとおりです。

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/08/03 11:06:15 [emerg] 1#1: socket() 0.0.0.0:80 failed (13: Permission denied)
nginx: [emerg] socket() 0.0.0.0:80 failed (13: Permission denied)

私は疑う衣類がネットワークアクセスをブロックしています。。 Apparmorを削除すると、すべてがうまく機能します。ただし、Apparmorをインストールした後特権Dockerコンテナはインターネットに接続できます。

この問題をデバッグするのに役立つ追加情報が必要な場合は、お知らせください。

答え1

この場合、「問題」とは、システムが要求したタスクを実行できないということではなく、システムが実際に実行してはいけないタスクを実行するように要求していることです。

1024 以下のポートは次のように分類されます。特権- ルートまたは特定の権限を持つ人だけがこのポートでソケットを開くことができます。

Dockerがrootとして実行されないか、少なくとも実行されません。してはいけないしたがって、ポート80でソケットを開くことはできません。これは正しい動作です。

高ポートとローカルホストでのみリッスンするようにDockerを設定し、Apacheまたはnginxをプロキシとして使用することをお勧めします。

関連情報