Docker

為什麼我無法訪問 docker 容器中的正常 bash 程序

  • September 30, 2021

我正在擺弄在 docker 容器中安裝一些小程序。

目前,我有這個 dockerfile:

FROM ubuntu:20.04

RUN apt-get update
RUN apt-get install vim -y
RUN apt-get install wget -y
RUN apt-get install gzip -y

WORKDIR "/root"

RUN wget https://github.com/spotbugs/spotbugs/releases/download/4.4.1/spotbugs-4.4.1.tgz

RUN gunzip -c spotbugs-4.4.1.tgz | tar xvf -

CMD ["ls"]
CMD ["/bin/bash"]

這會創建一個包含我需要執行的一些特定文件的圖像。

然後我建構我的容器:

sudo docker build . --tag img

然後我執行它:

sudo docker run -t -d img

執行後,我在其中打開一個 shell 會話:

sudo docker exec -it idhere /bin/bash

一旦我參加了這個會議,我就可以做whoami,lscd。但是現在我需要導航到這台電腦上的一個特定文件並執行一個 bash 文件,我需要使用 sudo 執行它,因為我的權限被拒絕:

root@0e92aab9b906:~/spotbugs-4.4.1/bin# ./spotbugs
bash: ./spotbugs: Permission denied
root@0e92aab9b906:~/spotbugs-4.4.1/bin# sudo ./spotbugs
bash: sudo: command not found

但它不知道 sudo 是什麼?為什麼會這樣,它不能訪問正常的 bash 程序嗎?

您收到Permission denied錯誤是因為~/spotbugs-4.4.1/bin/spotbugs沒有設置執行位。在 Dockerfile 中添加該行RUN chmod +x /root/spotbugs-4.4.1/bin/spotbugs以在 Docker 映像中添加該文件的執行位。

此外,該sudo軟體包未安裝在該 Docker 映像中。您不應該需要它,但如果您真的需要它,您可以像安裝其他工具一樣安裝它,方法是將該行添加RUN apt-get install sudo -y到 Dockerfile。

引用自:https://unix.stackexchange.com/questions/671328