簡體   English   中英

嘗試在 docker(github 代碼空間)上安裝 asdf 插件時權限被拒絕

[英]Permission denied when trying to install asdf plugin on docker (github codespace)

我在 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 ,而不是像任何其他腳本一樣運行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM