我在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/.bashrc
或RUN source $HOME/.bashrc
,而不是像其他脚本一样运行它。