Azure Kubernetes Docker in Docker: „Overlay“ wird über OverlayFS nicht unterstützt.

Azure Kubernetes Docker in Docker: „Overlay“ wird über OverlayFS nicht unterstützt.

Ich versuche, einen Docker in einem Docker-Szenario in einem von Azure verwalteten Kubernetes-Cluster (AKS) auszuführen.

Ich habe den Docker-Unix-Socket am Pod montiert. Ich beabsichtige, AKS-Pods als Azure DevOps-Agenten zu verwenden, um mein Projekt zu erstellen und zu testen. Dies erfordert eine Datenbank und ein Wiremock, das in Docker ausgeführt wird, was bedeutet, dass ein Docker-Netzwerk erstellt wird.

Unten sehen Sie meine aktuelle Konfiguration:

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>

der Fehler, den ich erhalte, ist

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

Irgendwelche Ideen, wie ich dieses Problem lösen kann?

PS Ich habe auch versucht, den ersten Kommentar in derDocker in DockerProblem, d. h. ich habe versucht, /bin/docker zu mounten, was verschiedene Probleme verursacht hat

Antwort1

Um Docker in Docker auszuführen, kann das /var/lib/dockerDateisystem nicht das Container-Dateisystem sein, das mit einem Overlay-FS erstellt wurde. Stattdessen müssen Sie dieses von einem externen Volume in ein unterstütztes Dateisystem auf dem externen Host mounten, entweder xfsmit ftype=1oder ext4. Dies ist dokumentiert unterhttps://docs.docker.com/storage/storagedriver/#supported-backing-filesystems

Sie können hierfür ein benanntes Volume auf dem Host verwenden, da /var/lib/docker auf dem Host-Dateisystem auf einem unterstützten FS liegt. Meine eigene DinD-CLI sieht beispielsweise so aus:

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"

Beachten Sie, dass bei der ersten Volume-Einbindung etwa Folgendes angezeigt wird: dind-1234:/var/lib/dockerEs wird ein benanntes Volume für dieses Verzeichnis im Container erstellt.

verwandte Informationen