试图在docker (github代码空间)上安装asdf插件时拒绝权限



我在dockerfile上有一些脚本,旨在将asdf的插件ruby插件安装在Github代码空间的自定义容器上(使用devcontainer)。Json, docker-compose,一个dockerfile…).

Dockerfile:

RUN git clone --depth 1 https://github.com/asdf-vm/asdf.git $HOME/.asdf && 
echo '. $HOME/.asdf/asdf.sh' >> $HOME/.bashrc && 
echo '. $HOME/.asdf/completions/asdf.bash' >> $HOME/.bashrc && 
echo '. $HOME/.asdf/asdf.sh' >> $HOME/.profile

第一部分工作正常。我很确定,因为如果我只运行上面的这个run时钟,我可以构建我的github代码空间而不会出现任何错误,我也确信asdf确实安装了,因为我通过命令

的终端检查了它
$ sudo su
$ asdf list

从asdf输出一条消息,显示它已经安装:

no plusins installed

但是下面的第二部分,我试图安装asdf的ruby插件,得到一个错误:

RUN $HOME/.bashrc && 
# install asdf ruby plugin
asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git && 
# add ruby version
asdf install ruby $RUBY_VERSION && 
# set our machine e.g our container's global Ruby version
asdf global ruby $RUBY_VERSION
我得到的错误是:
/bin/sh: 1: /root/.bashrc: Permission denied

对于错误输出的更大上下文,命令输出的终端显示:

#6 [ 3/11] RUN git clone --depth 1 https://github.com/asdf-vm/asdf.git $HOME/.asdf &&     echo '. $HOME/.asdf/asdf.sh' >> $HOME/.bashrc &&     echo '. $HOME/.asdf/completions/asdf.bash' >> $HOME/.bashrc &&     echo '. $HOME/.asdf/asdf.sh' >> $HOME/.profile
#6 0.746 Cloning into '/root/.asdf'...
#6 DONE 1.6s
#7 [ 4/11] RUN $HOME/.bashrc &&     asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git &&     asdf install ruby latest &&     asdf global ruby latest
#7 0.658 /bin/sh: 1: /root/.bashrc: Permission denied
#7 ERROR: executor failed running [/bin/sh -c $HOME/.bashrc &&     asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git &&     asdf install ruby $RUBY_VERSION &&     asdf global ruby $RUBY_VERSION]: exit code: 126

对于这个RUN块的第一行我尝试了不同的东西,但我总是遇到一些类型的错误:

如果我做RUN sudo $HOME/.bashrc,我得到了错误

sudo: /root/.bashrc: command not found

如果我做RUN sudo su $HOME/.bashrc,我得到了错误:

su: user /root/.bashrc does not exist or the user entry does not contain all the required fields

如果我做RUN su vscode $HOME/.bashrc,我得到了错误:

bash: /root/.bashrc: Permission denied

我是一个非常非常早期的docker初学者,所以我找不到如何绕过这个并安装ruby插件

第二个RUN应该是这样的:

RUN bash -c "source $HOME/.bashrc  && asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git && asdf install ruby RUBY_VERSION && asdf global ruby $RUBY_VERSION"

是的,它是丑陋的,但老实说,我不知道是否安全的分割成行。

关键是你必须你的。bashrc应用到所有剩下的命令。

.bashrc是每次登录(打开终端)时运行的文件/脚本,您不能像手动运行任何其他脚本一样运行它。

你可以试试这样的RUN exec $HOME/.bashrcRUN source $HOME/.bashrc,而不是像其他脚本一样运行它。