不要以 Root 身份运行! - Docker 镜像

不要以 Root 身份运行! - Docker 镜像

我在 docker 容器中运行 Ubuntu xenia(这是在我的 OS X VM Host 中运行的容器)。当您运行创建我的容器的 docker run 命令时,它会以 root 身份登录。

don't run this as root!因此,当我尝试在完成所有这些操作之后安装 Linuxbrew,并通过 app-gret 在我的容器中安装 curl 和 ruby​​ 之后,当我尝试安装 Linuxbrew 时出现错误:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

我希望能够以某种方式运行它。如果 docker run 以 root 身份登录,我有什么选择可以绕过 root 上的这个限制,以便我仍然可以运行此命令?如果 docker 始终以 root 身份将我登录到容器,那么当人们想要以非 root 用户身份在 Ubuntu 容器上安装此类内容时,他们通常会怎么做?

笔记:我对 Ubuntu、Linux 和 docker 都很陌生。这意味着我可能不了解所有基础知识,还有很多东西需要了解。

答案1

您可以使用USER命令来更改运行命令的用户。当然,您需要先创建用户,因此您的 Dockerfile 将包含以下内容:

RUN useradd --system -s /sbin/nologin someuser

USER someuser

答案2

谷歌搜索让我。我个人认为这不是一个好的解决方案,但它应该能够完成工作。此解决方案的作用如下:

不是直接在容器中启动程序,而是进行两步启动:首先,使用 docker 启动一个小脚本,该脚本基本上会在容器中创建一个新用户,然后以这个新用户的身份执行主程序。这是在那里使用的脚本,/home/r/script.sh是要启动的程序:

#!/bin/bash
adduser --disabled-password --gecos '' r
adduser r sudo
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
su -m r -c /home/r/script.sh

如果您想以该用户的身份使用 shell,您可以在那里输入 bash。

答案3

您可以使用:

useradd -m linuxbrew
sudo -u linuxbrew -i /bin/bash
PATH=~/.linuxbrew/bin:/usr/sbin:/usr/bin:/sbin:/bin  
yes | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

这里是 Linuxbrew 原始文档的链接

答案4

由于您可以从命令行“注销”root 身份,请运行第一个以 root 身份登录的命令,键入 exit(将您注销),然后运行告诉您“不要以 root 身份运行此操作!”的命令。

相关内容