linux 无法在kubernetes pod中安装curl命令

kpbwa7wx  于 5个月前  发布在  Linux
关注(0)|答案(2)|浏览(99)

我使用下面的命令在其中一个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的新手。

f3temu5u

f3temu5u1#

首先,这是一个反模式。容器是无状态的,在部署后不会改变。
无法运行apt-get的原因是因为您正在使用非特权用户运行容器,您可以在命令提示符中使用“$”符号。此外,sudo未安装,因此不可用。
如果你真的想在你的容器中有curl,你有几个选择:

  • 扩展你的Docker镜像,在构建时而不是运行时安装curl
  • 以root用户身份运行容器,并从交互式会话中安装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作为映像。

ny6fqffe

ny6fqffe2#

如果你试图从容器中进行故障排除,你可以尝试利用bash内置的TCP/UDP套接字支持,例如:

HOSTNAME=google.com; PORT=80
echo >/dev/tcp/$HOSTNAME/$PORT && echo "Open" || echo "Closed"

字符串
如果你的pod/container安装了编程语言,Python,Ruby,或者Node,你也可以使用一个bash行来测试。

相关问题