我正在摆弄在 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
、ls
和cd
。但现在我需要导航到这台计算机上的一个特定文件并运行 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 即可。