简洁版本:
我可以在以非 root 用户身份运行时绑定到 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
Run Code Online (Sandbox Code Playgroud)
伟大的。然后我使用 构建并运行它,现在我位于返回“container”的docker run --rm -it <img_name>容器中。whoami我没有root权限。touch /root/foo失败并拒绝访问。
嗯不错。非root用户,无需root权限运行。我不能sudo。我不能su root。正如我所期望的那样。
然后我运行:
python -m SimpleHTTPServer 80它很高兴地绑定到端口 80。我可以curl localhost在容器内运行并得到响应。
这是怎么回事?我缺少什么。
谢谢你的帮助。
如果有必要的话,我正在运行 Docker for Mac。我不指望会这样。(我的预期是错误的。)
此行为是在 20.3.0 中添加的net.ipv4.ip_unprivileged_port_start,通过将网络命名空间内部的值更改为0,有效地使所有端口都没有特权。由于容器通常运行单个应用程序,因此限制该应用程序仅侦听特权端口(就像您在多用户主机上希望的那样)没有什么价值。
| 归档时间: |
|
| 查看次数: |
5282 次 |
| 最近记录: |