Docker 错误:无法启动容器";在$PATH中找不到可执行文件:“未知”;
我对docker Kubernetes很陌生。我已经创建了3个节点的集群,现在我正在为pod创建一个YAML文件。我从图片名称为utkudarilmaz/hping3的图片中拍摄了这张图片。有人能帮我在路径中设置命令或docker文件吗?因为我不能理解这个问题。我想运行我的吊舱成功工作,以便我可以利用它。 我的YAML文件像Docker 错误:无法启动容器";在$PATH中找不到可执行文件:“未知”;,docker,kubernetes,Docker,Kubernetes,我对docker Kubernetes很陌生。我已经创建了3个节点的集群,现在我正在为pod创建一个YAML文件。我从图片名称为utkudarilmaz/hping3的图片中拍摄了这张图片。有人能帮我在路径中设置命令或docker文件吗?因为我不能理解这个问题。我想运行我的吊舱成功工作,以便我可以利用它。 我的YAML文件像 --- apiVersion: v1 kind: Pod metadata: name: second labels: app: web sp
---
apiVersion: v1
kind: Pod
metadata:
name: second
labels:
app: web
spec:
containers:
- name: hping3
image: utkudarilmaz/hping3
command: ["hping3 [IP_ADDRESS"]
ports:
- containerPort: 80
nodeSelector:
disktype: ssd
如果我没有指定[command],我的pod状态为CrashLoopBackOff。我已经找到了
我需要一个命令来连续运行容器,否则,如果我在YAML文件中像上面的命令那样指定一个命令:[“hping3 103.22.221.59”],那么当我运行时,它就会进入循环
kubectl exec –it second – hping3 [IP_ADDRESS]
我明白了
kubectl decribe pod second的输出
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m39s default-scheduler Successfully assigned default/second1 to netcs
Normal Pulled 3m35s kubelet Successfully pulled image "utkudarilmaz/hping3" in 2.714028668s
Normal Pulled 3m31s kubelet Successfully pulled image "utkudarilmaz/hping3" in 2.734426606s
Normal Pulled 3m15s kubelet Successfully pulled image "utkudarilmaz/hping3" in 2.61256593s
Normal Pulled 2m46s kubelet Successfully pulled image "utkudarilmaz/hping3" in 2.65727147s
Warning BackOff 2m11s (x5 over 3m4s) kubelet Back-off restarting failed container
Normal Pulling 2m4s (x5 over 3m38s) kubelet Pulling image "utkudarilmaz/hping3"
Normal Created 119s (x5 over 3m35s) kubelet Created container hping3
Warning Failed 119s (x5 over 3m35s) kubelet Error: failed to start container "hping3": Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "hping3 103.22.221.59": executable file not found in $PATH: unknown
Normal Pulled 119s kubelet Successfully pulled image "utkudarilmaz/hping3" in 5.128803062s
docker inspect$utkudarilmaz/hping3的一些输出
"Mounts": [],
"Config": {
"Hostname": "104e9920881b",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": true,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": null,
"Image": "utkudarilmaz/hping3",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"hping3"
],
"OnBuild": null,
"Labels": {
"desription": "hping3 tool building on Alpine:latest",
"version": "1.0"
我的容器将无法继续运行
当我尝试这个命令时
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ] from
https://stackoverflow.com/questions/31870222/how-can-i-keep-a-container-running-on-kubernetes/40093356
在路径中找不到相同的错误文件首先,您不需要在此处指定
containerPort
,因为在hping3
容器中的任何tcp端口上都没有侦听内容:
$ kubectl exec -ti second -- /bin/sh
/ # netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
事实上,您甚至不需要提供任何命令
,因为hping3
在这个docker映像中已经定义为入口点
,您实际上不需要覆盖它。运行hping3
Pod
所需的全部是以下yaml清单:
apiVersion: v1
kind: Pod
metadata:
name: second
spec:
containers:
- name: hping3
image: utkudarilmaz/hping3
args: ["IP-address"]
是的,在这种情况下必须提供一些args
,否则您的容器将陷入CrashLoopBackOff
状态
正如您可以在以下内容中看到的图像的非常简短的描述:
用法:
docker pull utkudarilmaz/hping3:latest
docker run utkudarilmaz/hping3:latest [parameters] target_ip
提供target\u ip
是强制性的,但您不必提供任何其他内容
尽管上面的使用说明没有说明在kubernetes上运行此图像,但这样的简短说明对我们来说应该已经足够了,我们应该能够将其“从docker翻译为kubernetes语言”
请查看官方kubernetes文档中标题为的以下部分,尤其是片段:
当您覆盖默认入口点和Cmd时,以下规则适用:
- 如果不为容器提供
或命令
,则使用Docker图像中定义的默认值参数
- 如果为容器提供了
但没有命令
,则只使用提供的args
。默认入口点和 忽略Docker映像中定义的默认Cmd命令
- 如果仅为容器提供
,则Docker映像中定义的默认入口点将与该容器的args
一起运行 你提供的args
- 如果提供
和命令
,则会忽略Docker图像中定义的默认入口点和默认Cmd。你的参数
与命令
参数一起运行
- 如果仅为容器提供
,则Docker映像中定义的默认入口点将与该容器的args
一起运行 你提供的args
Pod
定义中,我们只能提供args
,这是完全正确的。由于入口点
已在utkudarilmaz/hping3
图像中定义,因此无需通过定义命令来覆盖它
只有在CrashLoopBackOff
状态下尝试连接到hping3
容器时,我才能重现您收到的错误消息:
$ kubectl exec -ti second -- hping3 [IP-address]
error: unable to upgrade connection: container not found ("hping3")
但当它运行时,kubectl exec
可以正常工作:
$ kubectl exec -ti second -- hping3 [IP-address]
HPING [IP-address] (eth0 [IP-address]): NO FLAGS are set, 40 headers + 0 data bytes
顺便说一句,命令中的连字符看起来有点奇怪,它们与-
的字符不完全相同,从问题中的代码段复制时解释不正确,导致如下奇怪错误:
Error from server (NotFound): pods "–it" not found
因此,请注意您在命令中使用的确切字符
关于您在描述kubectl
您的Pod
时看到的错误消息的解释:
"hping3 [IP-address]": executable file not found in $PATH: unknown
它清楚地表明,在您的$PATH
中找不到名为“hping3[IP address]”(是的,单个文件的名称!)的可执行文件,我确信在命令:
中没有具有此名称的可执行文件,命令名及其参数需要是单独的单词<代码>命令:[“hping3”,“103.22.221.58”]
。几天前,我写了一个较长的解释。@david Maze我们可以有任何通用命令来帮助持续运行容器吗?它应该做什么?把容器想象成一个过程;“我可以在不指定命令的情况下创建一个进程”并不是很有意义,同样地,仅仅拥有一个空容器也不是特别有用。就像这个,但这在我的CVA中也不起作用,我希望它会起作用,是的。
"hping3 [IP-address]": executable file not found in $PATH: unknown