我正在尝试在 Azure 托管的 kubernetes 集群 (aks) 中运行 docker in docker 场景
我已将 docker unix 套接字安装到 pod 上。我的目的是使用 aks pod 作为 azure devops 代理来构建和测试我的项目。这需要在 docker 中运行数据库和 wiremock,这意味着它将创建 docker 网络
下面您可以看到我当前的配置:
Name: my-devopsagent-javaagent-64855bb796-smpkz
Namespace: my-devops-agents
Priority: 0
Node: aks-default-21935887-vmss000000/10.128.0.4
Start Time: Mon, 16 Dec 2019 14:09:04 +0200
Labels: app=my-devopsagent-javaagent
pod-template-hash=64855bb796
Annotations: <none>
Status: Running
IP: 10.128.0.28
IPs: <none>
Controlled By: ReplicaSet/my-devopsagent-javaagent-64855bb796
Containers:
my-devopsagent-javaagent:
Container ID: docker://ffffff26c3b4a92678a95f446c0ada685986f30c56138109b080
Image: mycontainerregistry.azurecr.io/mycompany/devopsagent/javaagent:latest
Image ID: docker-pullable://mycontainerregistry.azurecr.io/mycompany/devopsagent/javaagent@sha256:4422edb12d1b4bbff92bc36e7d33715222daab6ef3439cfffffff
Port: <none>
Host Port: <none>
State: Running
Started: Mon, 16 Dec 2019 14:09:06 +0200
Ready: True
Restart Count: 0
Environment:
AZP_AGENT_NAME: CONTAINER_JAVA_AGENT
AZP_URL: https://dev.azure.com/mycompany
AZP_POOL: Default
AZP_TOKEN: <set to the key 'pat' in secret 'pat'> Optional: false
Mounts:
/var/run/docker.sock from dockersock (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-2msgf (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
dockersock:
Type: HostPath (bare host directory volume)
Path: /var/run/docker.sock
HostPathType:
default-token-2msgf:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-2msgf
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events: <none>
我收到的错误是
ERRO[0000] 'overlay' is not supported over overlayfs
error creating libpod runtime: 'overlay' is not supported over overlayfs: backing file system is unsupported for this graph driver
关于如何解决这个问题有什么想法吗?
PS 我也尝试了docker 中的 docker问题,这意味着我尝试挂载 /bin/docker,这引入了不同的问题
答案1
要在 docker 中运行 docker,/var/lib/docker
文件系统不能是使用 overlayfs 构建的容器文件系统。相反,您必须使用 或 将其从外部卷挂载到外部主机上受支持的文件系统xfs
。ftype=1
这ext4
在以下位置有记录:https://docs.docker.com/storage/storagedriver/#supported-backing-filesystems
您可以在主机上使用命名卷来实现此目的,因为主机文件系统上的 /var/lib/docker 将位于受支持的 FS 上。例如,我自己的 DinD CLI 如下所示:
docker run -d --rm --privileged \
-v "dind-${port}:/var/lib/docker" \
-v "dind-${port}-ccerts:/certs/client" -e DOCKER_TLS_CERTDIR=/certs \
-v "$HOME:$HOME" \
--name "dind-${port}" -p "127.0.0.1:${port}:2376" \
"docker:${opt_t}-dind"
请注意,第一个卷挂载类似于dind-1234:/var/lib/docker
在容器中为该目录创建一个命名卷。