docker run -d /var/run/docker.sock:/var/run/docker.sock ...
我试图从上述容器中创建Kubernetes部署,但目前得到: br />
无法通过unix:///var/run/docker.sock连接到Docker守护程序。 docker守护程序是否正在运行?
这是预料之中的,因为我没有在部署yaml中将
/var/run/docker.sock
声明为卷。问题是我没有知道该怎么做。是否可以将
/var/run/docker.sock
作为卷安装在部署Yaml中?如果没有,从Kubernetes部署/吊舱中运行docker兄弟容器的最佳方法是什么?
#1 楼
无法验证,因为在k8s监督之外启动容器对我来说听起来很脆弱,但是您应该能够使用hostPath卷挂载/var/run/docker.sock
。 > apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: gcr.io/google_containers/test-webserver
name: test-container
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock-volume
volumes:
- name: docker-sock-volume
hostPath:
# location on host
path: /var/run/docker.sock
# this field is optional
type: File
我认为一个简单的装载应该足以允许从容器内的docker客户端到主机上的docker守护进程的通信,但是如果遇到写入许可错误,则意味着您需要以以下方式运行容器使用这样的securityContext对象的特权容器
(只是从上方提取以显示附加内容,以及从文档中获取的值):
spec:
containers:
- image: gcr.io/google_containers/test-webserver
securityContext:
privileged: true
name: test-container
#2 楼
尽管这是一个可行的解决方案(我自己使用过),但通过安装/var/run/docker.sock
在Kubernetes容器中运行Docker存在一些缺点。大多数情况下,您正在使用Kubernetes无法控制的Docker容器。 br />
我发现的另一个建议的解决方案是在您的吊舱中使用侧面车厢。请参阅Kubernetes上的Docker-in-Docker案例。提议的解决方案在第2部分中分为两部分。
我希望这会有所帮助。
评论
这行得通,谢谢。是的,它是第三方工具,因此并不理想。但是我至少希望Kubernetes中的主要容器使其更可靠。容器使用浏览器增加临时容器以进行自动化UI测试,然后销毁浏览器容器。
–rys
17年11月7日在17:23
@rys是的,这是我想到的一种情况,如果节点负载过高,因为k8s可能会移动您的“启动器”容器,您可能仍然会遇到问题。但是我认为在这种情况下测试套件的失败是可以接受的
–滕西拜
17年11月8日在6:55