Debian 上的 Docker 无法绑定到端口 80

Debian 上的 Docker 无法绑定到端口 80

我在 Debian 11 上运行 Docker。我部署了一个 Nginx 容器,但它无法绑定到端口 80,即使端口 80 没有被任何其他进程使用。我什至尝试以 root 身份运行 Docker。

这是命令: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 时一切正常。但是,安装 Apparmor 后,仅特权Docker 容器能够连接到互联网。

如果您需要任何其他信息来帮助我调试此问题,请告诉我。

答案1

在这种情况下,“问题”并不在于您的系统无法执行您所要求的操作,而是您要求它执行一些实际上不应该执行的操作。

低于 1024 的端口被分类为特权-- 只有 root 或具有特定权限的人才被允许打开这些端口上的套接字。

Docker 没有以 root 身份运行,或者至少没有不应该,因此它无法打开端口 80 上的套接字。这是正确的行为。

我建议将 Docker 设置为仅侦听高端口和本地主机,然后使用 apache 或 nginx 作为代理。

相关内容