2016-07-15 8 views
11

私は状態を必要とするいくつかのコンテナを持っています - 私はスケールを1に設定しますが、ボリューム上でどのホストを起動しても共有されるようにしたいと思います。Docker 1.12 swarm modeとcontainer volumes

私はこれを達成するためにネットワークマウントを使用する必要があると思いますが(これは問題ありませんが)、ドッカーswarm 1.12を使用してボリュームをどのように構成しますか?

私はドッカーのボリュームを作成することができます知っていると私はドライバを指定する必要があるかもしれないと思うが、私はこれの一つの例を見つけるのに苦労している!

答えて

12

docker service create --mount ...には、永続データの2つのオプションがあります。バインド・マウントと名前付きボリューム作成されたホスト上にバインドマウントが残っているので、共有できないため、うまく動作しません。

名前付きボリュームは、docker volume createを使用して作成することも、docker service createの一部として暗黙的に--mountオプションを使用して作成することもできます。

$ docker volume create -d --driver cio --name cassandradb --opt profile=CASSANDRA 
$ docker service create \ 
--mount source=cassandradb,target=/var/lib/cassandra,volume-driver=cio \ 
--replicas 1 \ 
--name cassandra \ 
cassandra 

docker service createはデフォルトで名前付きボリュームになるため、この例ではタイプが指定されていません。ボリュームドライバはポータブルボリュームをサポートしています。 RexRayやFlockerなどの他のボリュームドライバもポータブルボリュームをサポートしています。ここには例があるRexRayの記事があります。

ボリュームラベルとボリュームオプションに--mountオプションもあります。 Dockerのサイトで公式の文書はまだ上がっていません。ただし、バインドマウントと名前付きボリュームの詳細情報を取得することができますhere

8

github pull request 24334のように構文が確定しているかどうかはわかりませんが、探しているcliオプションはdocker service --mount ...です。このようなものを使用するときは、データがマウント可能であることを確認する必要があるため、nfsやglusterのようなドライバを調べる必要があります。それ以外の場合、コンテナを移動する必要があり、ホストから直接データをマウントした場合、必要なマウントなしで再起動されます。


編集:現在の--mount構文は次のとおりです。マウントという名前のボリュームの

​​ ホスト/バインド・マウントの

または

docker service create --name nginx \ 
    --mount type=volume,source=web,target=/usr/share/nginx/html \ 
    -p 80:80 nginx 

。私は同じ質問をたくさん聞いているので、トピックに blog postを投稿しました。

+0

私はrc4を使用しており、/ mnt/docker/jackettにネットワーク共有をマウントしています。これはうまくいくはずですか? 'ドッカーサービスの作成 - マウントバインド、src =/mnt /ドッカー/ジャケット、dst =/config/.config -p 9117:9117 --name files_jackett dreamcat4/jackett'。 私が得るエラーは--mountです:無効なフィールド 'bind'はキー=値のペアでなければなりません。 –

+3

構文は次のようになっているはずです: 'docker service create --mount type = bind、source =/mnt/docker/jackett、target =/config/.config -p 9117:9117 --name files_jackett dreamcat4/jackettclear'!ありがとう –

関連する問題