📜  Docker 没有 sudo - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:30:32.399000             🧑  作者: Mango

Docker 没有 sudo - Shell/Bash

如果您已经使用过 Docker,您可能已经遇到了与使用 Docker 容器时没有sudo权限的问题。和其他 Linux 系统一样,大多数 Docker 镜像默认使用非特权用户来运行进程。这为容器提供了更好的安全性和隔离性。然而,使用 Docker 容器时,有时我们需要执行一些需要 root 或 sudo 权限的操作,例如启动某些服务或挂载目标目录等。

本文将介绍如何在 Docker 环境下获得 sudo 权限。

方法一:在构建过程中添加 sudo 命令

sudo 安装到镜像中是一个相对简单的任务,只需要在 Dockerfile 中添加以下行:

RUN apt-get update && apt-get install -y sudo

这将利用 apt-get 安装 sudo。您可以在进入容器时使用 sudo 命令了。

方法二:在启动时挂载主机的 /etc/sudoers 文件

如果您的容器中不包含 sudo,您可以通过挂载主机上的 /etc/sudoers 文件来实现在容器中获得 sudo 权限。只需要执行以下命令即可:

docker run --rm -v /etc/sudoers:/etc/sudoers alpine sh -c "sudo whoami"

这将挂载主机上的 /etc/sudoers 文件,并在 Alpine 镜像中运行 whoami 命令。sudo 命令用于提权。如果一切正常,您将看到 root 输出。

方法三:使用 Docker exec 命令

如果您已经在容器中运行了进程,您可以使用 docker exec 命令以特权用户的身份执行其他命令。例如,运行以下命令将进入到特权shell中:

docker exec -u 0 -it [容器 ID] /bin/bash

这将在以 root 用户身份进入到容器中的 bash shell 中。您可以使用此方法执行其他需要特权用户身份的命令。

总结

这篇文章介绍了在使用 Docker 容器时如何获得sudo 权限的三种方法。在 Docker 容器中以非特权用户身份运行进程可以提高容器的安全性和隔离性,但有时我们需要特权用户的权限执行某些操作时,可以通过添加sudo命令到 Docker 镜像中、挂载主机上的sudoers文件、使用 Docker exec 命令以特权用户身份执行其他命令来实现。