无法在kubernetes pod中安装curl命令

问题描述 投票:0回答:2

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

linux docker curl apt-get
2个回答
2
投票

首先这是一种反模式。容器应该是无状态的,并且在部署后不会改变。

无法运行

apt-get
的原因是因为您正在使用非特权用户运行容器,您可以通过命令提示符中的“$”符号来判断。另外
sudo
未安装,因此无法使用。

如果你真的想在你的容器中卷曲,你有几个选择:

  • 扩展你的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
作为映像。


0
投票

如果您尝试从容器进行故障排除,您可以尝试利用 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

© www.soinside.com 2019 - 2024. All rights reserved.