Azure Kubernetes Docker in Docker: 「overlay」は overlayfs ではサポートされていません

Azure Kubernetes Docker in Docker: 「overlay」は overlayfs ではサポートされていません

Azure マネージド Kubernetes クラスター (aks) 内で Docker in Docker シナリオを実行しようとしています

私はdocker UNIXソケットをポッドにマウントしました。私の意図は、aksポッドを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 を実行するには、ファイルシステムは overlayfs で構築されたコンテナ ファイルシステムにすることはできません。代わりに、またはを使用/var/lib/dockerして、外部ボリュームから外部ホスト上のサポートされているファイルシステムにマウントする必要があります。これは、次の場所で文書化されています。xfsftype=1ext4https://docs.docker.com/storage/storagedriver/#サポートされているバックファイルシステム

ホストファイルシステム上の /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コンテナー内のこのディレクトリの名前付きボリュームを作成したようなものであることに注意してください。

関連情報