web-dev-qa-db-ja.com

タイプ "bind"の無効なマウント構成を取得しています:Dockerにバインドソースパスが存在しません

次のdocker-composeをdocker swarm clusterにデプロイしようとしています。

version: '3.2'
services:
  jenkins:
    image: jenkins/jenkins:lts
    ports:
      - 8080:8080
    volumes:
      - ./data_jenkins:/var/jenkins_home
    deploy:
      mode: replicated
      replicas: 1

data_jenkinsはdocker-composeと同じ場所にあり、そのパスをvolumeとして渡します。しかし、なぜそれがソースパスを投げることが存在しないのですか?正確には何が問題ですか。

また、ディレクトリが存在しない場合は、-vで正しく作成されているはずです。なぜそうではないのですか?

8

これは Docker Swarm BIND MOUNTS に明確に文書化されています

ホストパスをサービスのコンテナーにバインドマウントする場合、パスはすべてのSwarmノードに存在する必要があります。 Dockerスウォームモードスケジューラは、リソースの可用性の要件を満たし、指定したすべての制約と配置設定を満たすすべてのマシンでコンテナをスケジュールできます。

単一のコンテナーを実行する場合とは異なり、バインドマウントホストディレクトリは、存在しない場合は作成されません。クラスターノードでコンテナーを実行する前に存在する必要があります。

16
yamenk