docker 中的 azure kubernetes docker:overlayfs 不支持“overlay”

docker 中的 azure kubernetes docker:overlayfs 不支持“overlay”

我正在尝试在 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 构建的容器文件系统。相反,您必须使用 或 将其从外部卷挂载到外部主机上受支持的文件系统xfsftype=1ext4在以下位置有记录: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在容器中为该目录创建一个命名卷。

相关内容