为什么我无法访问 docker 容器中的常规 bash 程序

为什么我无法访问 docker 容器中的常规 bash 程序

我正在摆弄在 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

一旦我参加了这次会议,我就能做到whoamilscd。但现在我需要导航到这台计算机上的一个特定文件并运行 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 程序吗?

答案1

您收到Permission denied错误是因为~/spotbugs-4.4.1/bin/spotbugs没有设置执行位。RUN chmod +x /root/spotbugs-4.4.1/bin/spotbugs在 Dockerfile 中添加以下行,以在 Docker 映像中添加该文件的执行位。

此外,该sudo软件包未安装在该 Docker 映像中。您不应该需要它,但如果您确实需要它,您可以像安装其他工具一样安装它,只需将该行添加RUN apt-get install sudo -y到 Dockerfile 即可。

相关内容