0

我想在本地构建奇点接收器,而不是依赖奇点集线器并将有限的每日构建配额浪费在修复愚蠢的语法错误上。但是,我不是运行容器的机器上的管理员。我想在 Singularity hub 上构建一个容器,我是一个管理员,可以在其中构建其他其他容器。但是,我尝试构建一个我可以使用的容器sudosu让我认为这是不可能的。有没有办法设置一个容器,我可以在其中构建容器,如果是这样,我目前的方法有什么问题?

我的食谱中有以下代码来创建用户“ubuntu”,密码为“ubuntu”,并且是“sudo”组的成员:

Bootstrap:docker
From:ubuntu:xenial
#...some other stuff that doesn't matter here...
%post
apt-get update
apt-get install -y sudo

useradd ubuntu
echo "ubuntu:ubuntu" | chpasswd
usermod -aG sudo ubuntu

该配方在 Singularity hub 上成功构建。但是,我不能在容器内使用sudo或:su

$singularity build --sandbox xenial shub://path/to/my/container:xenial
<container builds with some warnings about my account being non-root>
$singularity shell xenial
Singularity: Invoking an interactive shell within container...

Singularity xenial$ su ubuntu
Password:            #I type "ubuntu"
su: Authentication failure
Singularity xenial$ sudo whoami
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
Singularity xenial$ls -l /usr/bin/sudo
-rwxr-xr-x. 1 hbraunDSP dip 136808 Jun 10 22:53 /usr/bin/sudo

这是否太不安全而无法实现?如果可能的话,我如何制作一个可以用来构建容器的容器?

4

1 回答 1

1

Singularity/etc/passwd默认挂载,因此容器内可用的用户与主机上的用户相同。因此,就图像而言,当您被炮击时,您添加的新ubuntu用户并不存在。

如果您想在另一个镜像中运行时构建奇点镜像,那么您至少需要sudo singularity shell ...保留您的 sudo / root 权限。

或者,如果您使用该--privileged选项,您可以从 Docker 容器内部构建奇点映像。

于 2019-09-04T12:07:17.660 回答