Docker 容器内部切换普通用户

在使用 Docker 运行容器时,默认情况下是以 root 用户身份运行的。然而,在某些情况下,我们可能希望在容器内部切换到普通用户,以增加容器的安全性。本文将介绍如何在 Docker 容器内部切换到普通用户,并给出相应的代码示例。

为什么要切换普通用户?

在 Docker 容器内部以 root 用户身份运行可能会带来一些安全风险。因为 root 用户具有最高权限,一旦容器内部发生安全漏洞,攻击者将可以完全控制容器,并可能对主机和其他容器造成威胁。

为了减少这种安全风险,我们可以在容器内部切换到普通用户。普通用户具有较低的权限,攻击者将无法获得 root 权限,从而限制了他们对容器内部和其他容器的操纵。

如何在容器内部切换用户?

在 Dockerfile 中,我们可以使用 USER 指令来切换用户。下面是一个示例的 Dockerfile:

FROM ubuntu:latest

RUN groupadd -r myuser && useradd -r -g myuser myuser
USER myuser

CMD ["bash"]

在这个示例中,我们先创建一个名为 myuser 的用户和组,并将其指定为容器的初始用户。然后使用 USER 指令将容器内部的用户切换为 myuser。最后使用 CMD 指令指定容器启动时要运行的命令。

示例应用

为了更具体地说明切换用户的过程,我们来创建一个简单的示例应用。这个应用将输出当前用户的用户名和用户 ID。

首先,创建一个名为 app.py 的 Python 脚本,将以下代码复制到文件中:

import os

print("Current user: {}".format(os.getlogin()))
print("User ID: {}".format(os.getuid()))

接下来,创建一个名为 Dockerfile 的文件,并将以下代码复制到文件中:

FROM python:latest

RUN groupadd -r myuser && useradd -r -g myuser myuser
USER myuser

COPY app.py /app/app.py
WORKDIR /app

CMD ["python", "app.py"]

在这个示例中,我们使用了 Python 的官方镜像作为基础镜像,并在其中切换到 myuser 用户。然后将 app.py 文件复制到容器的 /app 目录中,并将工作目录切换到 /app。最后,使用 CMD 指令运行 python app.py 命令。

接下来,我们可以使用以下命令来构建和运行容器:

docker build -t myapp .
docker run --rm myapp

运行结果应该类似于以下输出:

Current user: myuser
User ID: 1000

在这个示例中,我们成功地切换到了 myuser 用户,并输出了该用户的用户名和用户 ID。

总结

在 Docker 容器内部切换到普通用户可以增加容器的安全性,限制了攻击者对容器和其他容器的操纵。我们可以使用 Dockerfile 中的 USER 指令来切换用户,并通过示例应用来验证切换是否成功。希望本文对您理解 Docker 容器内部切换普通用户有所帮助。

引用:[Docker 官方文档](

<!-- mermaid markdown插入饼状图 -->

pie
  "Root User" : 70
  "Normal User" : 30