我正在使用以下命令在其中一个 Pod 中安装curl:
$ apt-get install curl
但是,我遇到了以下错误:
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
当我尝试删除文件 /var/lib/dpkg/lock-frontend 时
$ rm /var/lib/dpkg/lock-frontend
rm: remove write-protected regular empty file '/var/lib/dpkg/lock-frontend'? y
rm: cannot remove '/var/lib/dpkg/lock-frontend': Permission denied
我也无法使用 sudo 命令:
$ sudo rm /var/lib/dpkg/lock-frontend
bash: sudo: command not found
请帮忙,因为我是 Kubernetes 和 Pod 的新手。
首先这是一种反模式。容器应该是无状态的,并且在部署后不会改变。
无法运行
apt-get
的原因是因为您正在使用非特权用户运行容器,您可以通过命令提示符中的“$”符号来判断。另外 sudo
未安装,因此无法使用。
如果你真的想在你的容器中卷曲,你有几个选择:
curl
curl
(不鼓励)。第一种方法的示例(我建议您使用的方法)涉及如下 Dockerfile:
FROM the-image-name-you-are-currently-using
RUN apt-get update; apt-get install -y curl
然后,您需要使用(来自
Dockerfile
所在的同一目录)构建此新图像:
docker build -t your-new-image-name:version .
使用
docker push
将映像推送到注册表后,您可以更新 Pod
以使用 your-new-image-name:version
作为映像。
如果您尝试从容器进行故障排除,您可以尝试利用 bash 的内置 TCP/UDP 套接字支持,例如:
HOSTNAME=google.com; PORT=80
echo >/dev/tcp/$HOSTNAME/$PORT && echo "Open" || echo "Closed"
如果您的 Pod/容器安装了编程语言(Python、Ruby 或 Node),您也可以使用单个 bash 行进行测试。看看我在这里准备的不同选项https://go.rebelion.la/uSTroubleshooting