Docker Kubernetes:通过主机路径装载的可执行文件失败,并发现错误
我试图从我的吊舱运行docker来启动docker容器(k8s内的docker)。为了从主机获取docker图像,我通过hostPath在我的pod中安装docker.sock和docker命令。即使我找到了挂载的文件,但无法执行docker命令,它也会失败,并出现command not found错误Docker Kubernetes:通过主机路径装载的可执行文件失败,并发现错误,docker,kubernetes,minikube,Docker,Kubernetes,Minikube,我试图从我的吊舱运行docker来启动docker容器(k8s内的docker)。为了从主机获取docker图像,我通过hostPath在我的pod中安装docker.sock和docker命令。即使我找到了挂载的文件,但无法执行docker命令,它也会失败,并出现command not found错误 apiVersion: v1 kind: Pod metadata: name: alphine labels: app: alphine spec: containers:
apiVersion: v1
kind: Pod
metadata:
name: alphine
labels:
app: alphine
spec:
containers:
- name: alpine
image: alpine
securityContext:
privileged: true
volumeMounts:
- name: tmp
mountPath: /tmp
- name: docker-sock
mountPath: /var/run/docker.sock
- name: docker-cmd # docker command from host.
mountPath: /usr/bin/docker
- name: lib64 # for running docker from the host.
mountPath: /lib64
readOnly: true
- name: usr-lib64 # for running docker from the host.
mountPath: /usr/lib64
readOnly: true
command: ["sleep", "infinity"]
volumes:
- name: tmp
emptyDir: {}
- name: docker-cmd
hostPath:
path: /usr/bin/docker
type: File
- name: lib64
hostPath:
path: /lib64
type: Directory
- name: usr-lib64
hostPath:
path: /usr/lib64
type: Directory
- name: docker-sock
hostPath:
path: /var/run/docker.sock
type: Socket
我用下面的命令盯着minikube
minikube start --memory=16g --cpus=2 --disk-size=10g \
-p mycluster \
--extra-config=apiserver.enable-admission-plugins=PodSecurityPolicy \
--addons=pod-security-policy --wait=all
docker create
--name=mypod
--read-only
--restart=on-failure
-v /usr/bin/docker:/usr/bin/docker:ro
-v /lib64:/lib64:ro
-v /usr/lib64:/usr/lib64:ro
-v /var/run/docker.sock:/var/run/docker.sock
alphine
docker start mypod
这同样适用于Docker环境中的Docker。在这里,我将使用以下命令启动容器
minikube start --memory=16g --cpus=2 --disk-size=10g \
-p mycluster \
--extra-config=apiserver.enable-admission-plugins=PodSecurityPolicy \
--addons=pod-security-policy --wait=all
docker create
--name=mypod
--read-only
--restart=on-failure
-v /usr/bin/docker:/usr/bin/docker:ro
-v /lib64:/lib64:ro
-v /usr/lib64:/usr/lib64:ro
-v /var/run/docker.sock:/var/run/docker.sock
alphine
docker start mypod
我是不是遗漏了什么?如有任何提示/参考,不胜感激。提前感谢。您的minikube群集的主机路径与您的本地计算机不同。在本地计算机上运行
docker
命令时,它使用存在文件/目录的计算机的主机路径。但是这些文件/目录不存在于minkube集群节点中
解决方案:
来宾操作系统似乎有所不同。我尝试了
Ubuntu:latest
而不是alpine
作为我的来宾映像,我能够从我的来宾访问docker命令
不确定这两个客户操作系统之间是否存在任何安全性差异如果需要启动其他容器,请使用Kubernetes API来完成。在Kubernetes管理的节点上尝试混合Docker命令不能保证可靠工作。如图所示的注入主机命令即使在普通Docker中也不能可靠地工作,在Kubernetes中,也不能保证每个节点在相同的位置都有相同版本的相同二进制文件(通常,根本不使用
hostPath
卷)。