我在 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 身份运行此操作!”的命令。