gpt4 book ai didi

docker - 我可以在 docker 容器中以非 root 用户身份绑定(bind)到端口 80。为什么?这是怎么回事?

转载 作者:行者123 更新时间:2023-12-05 02:01:34 24 4
gpt4 key购买 nike

简短版:

我可以在以非 root 用户身份运行时绑定(bind)到 docker 容器内的端口 80。请解释。

长版:

我是 docker 的新手,但在其他方面有很多经验。除了这种行为,一切对我来说都有意义。

我已尝试使用 Google centos 基础镜像和最新的 docker ubuntu 镜像。

我使用以下 Dockerfile 从这些基础构建了一个 docker 镜像:

FROM marketplace.gcr.io/google/centos7

# or for ubuntu
# FROM ubuntu
# RUN apt-get update -y && apt-get install -y python

RUN groupadd -g 1000 container && useradd -r -u 1000 -g container container
USER container

太棒了。然后我用 docker run --rm -it <img_name> 构建并运行它,现在我在容器中 whoami返回“容器”。我没有root权限。 touch /root/foo因访问被拒绝而失败。

好的,很酷。非 root 用户,在没有 root 权限的情况下运行。我不能 sudo .我不能 su root .正如我所料。

然后我运行:

python -m SimpleHTTPServer 80它很高兴地绑定(bind)到端口 80。我可以运行 curl localhost在容器内,我得到响应。

这是怎么回事?我错过了什么。

感谢您的帮助。

如果重要的话,我正在为 Mac 运行 Docker。我不希望它会。 (我预料错了。)

最佳答案

此行为是 added in 20.3.0通过将网络命名空间内的 net.ipv4.ip_unprivileged_port_start 的值更改为 0,有效地使所有端口都没有特权。由于容器通常运行单个应用程序,因此限制该应用程序仅监听特权端口没有什么值(value),就像您希望在多用户主机上那样。

关于docker - 我可以在 docker 容器中以非 root 用户身份绑定(bind)到端口 80。为什么?这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66431299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com