我在一个dockerfile上有一些脚本,目的是在一个Github编码空间的立方体容器上安装Github编码空间的立方体容器的插件ruby插件(使用devcontainer.json,dockerfile,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第一部分工作正常。我确定,因为如果我在上面运行这个运行时钟,我可以构建我的github codespace,没有任何错误,而且我也确定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我很早就开始使用对接程序了,所以我找不到如何绕过它安装ruby插件。
发布于 2022-06-20 16:06:29
第二轮应该是这样的:
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才能将其应用于所有剩余的命令。
发布于 2022-06-20 13:16:57
.bashrc是每次登录时运行的文件/脚本(打开终端),您不能像其他脚本一样手动运行它。
您可以尝试类似于这个RUN exec $HOME/.bashrc或RUN source $HOME/.bashrc的东西,而只需像其他脚本一样运行它。
https://stackoverflow.com/questions/72686672
复制相似问题