我正在使用busybox来检测kubernetes v1.18 pod中的网络问题。我创建了如下busybox:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
并登录以查找kubernetes集群的网络情况:
kubectl exec -it busybox /bin/bash
让我惊讶的是busybox没有curl,为什么busybox的包里没有curl命令呢?我上网查了一下,发现文件里没有提到如何在busybox里添加curl,我试着安装curl,但是没有办法,有没有办法在busybox里添加curl包呢?
7条答案
按热度按时间q5lcpyga1#
简而言之,你不能。
为什么?
因为busybox没有软件包管理器,比如:好吃,apk,或apt-get..
实际上,您有两种解决方案:
1.使用修改后的busybox
您可以使用其他busybox映像,如progrium/busybox,它提供opkg-install作为软件包管理器。
然后道:
2.或者如果您的关注点使用最少的图像,您可以使用阿尔卑斯
然后:
dfty9e192#
不可以。考虑将
alpine
作为基础映像,而不是包括BusyBox和一个包管理器,或者构建(或查找)一个预安装了所需工具的自定义映像。BusyBox是一个二进制文件,其中包含了许多常用Linux工具的实现。BusyBox documentation包含了一个命令列表。如果不编写C代码,就无法在其中“安装”更多的命令。
BusyBox确实包含
wget
的实现,它可能适合您的目的(wget -O- http://other-service
)。von4xj4u3#
BusyBox有一个
wget
的子集。curl的使用模式在您的操作系统中比BusyBox附带的要复杂得多。为了阐明我的意思,请在您的操作系统中运行以下命令:
在Busybox容器内运行wget的help时,应该会给予一个最小子集包:
在K8中,您可以运行以下命令:
如果您的用例需要
curl
,我建议使用Alpine
,它是busybox
+一个最小的包管理器和libc
实现,这样您就可以轻松地执行apk add --no-cache curl
并获得真实的的curl
(甚至可以使用apk add --no-cache wget
获得“真正的”wget,而不是BusyBox的wget
)。vd8tlhqk4#
正如@abdennour所建议的,我不再坚持使用
busybox
了。Alpine是一个非常轻量级的Linux容器映像,正如其他人在这里建议的那样,您可以在其中安装任何类似UNIX的工具来方便地完成您的故障排除任务。实际上,我在.bashrc
的dotfiles中使用了这个函数来旋转一个方便的临时准备好的Alpine pod:xkrw2x1b5#
或者只是将静态构建的curl复制到Busybox中:https://github.com/moparisthebest/static-curl/releases
ttcibm8c6#
径向具有busybox images的叠加,添加cURL。
docker pull radial/busyboxplus:curl
他们也有第二个图像cURL + Git.
docker pull radial/busyboxplus:git
2jcobegt7#
正 如 其他 人 所 说 , 答案 是 否定 的 , 你 需要 使用 另 一 种 图像 。
有 :
curlimages/curl
组合 使用radial/busyboxplus:curl
的 https://hub.docker.com/r/radial/busyboxplusnixery.dev/curl
的 Nixery图像 大小 :
中 的 每 一 个