web-dev-qa-db-ja.com

Docker:特定のディレクトリに永続ボリュームを作成する

Docker用に 永続ボリューム を作成する必要があります。ボリュームにはextra-addonsという名前を付け、/mnt/に配置する必要があります。

私はこのコマンドを実行します:

Sudo docker volume create /mnt/extra-addons

私はこのエラーメッセージを受け取りました:

Error response from daemon: create /mnt/extra-addons: "/mnt/extra-addons" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a Host directory, use absolute path

単にSudo docker volume create extra-addonsを実行すると、この問題は発生しませんが、Sudo docker inspect extra-addonsを使用して問題のボリュームを検査すると、不要な場所にあることがわかります。

[
    {
        "CreatedAt": "2018-04-21T14:40:25+03:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/extra-addons/_data",
        "Name": "extra-addons",
        "Options": {},
        "Scope": "local"
    }
]

私はむしろこのようなボリュームを見たいと思っています:/mnt/extra-addons

何か案が?

16

私は解決策を見つけました:

local-persist プラグインをインストールする必要がありました。

次のように、作成するボリュームをマウントポイントにマウントする必要がありました。

 Sudo docker volume create -d local-persist -o mountpoint=/mnt/ --name=extra-addons

私が期待したものを得たかどうかを確認してください:

Sudo docker volume inspect extra-addons

結果:

[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "local-persist",
        "Labels": {},
        "Mountpoint": "/mnt/",
        "Name": "extra-addons",
        "Options": {
            "mountpoint": "/mnt/"
        },
        "Scope": "local"
    }
]

それが私が探していたものです。

14

Dockerにプラグインをインストールしたくない場合は、ボリュームのシンボリックリンクを作成することをお勧めします。

$ docker volume create <myVolume>
$ docker volume inspect <myVolume> 
[
    {
        "CreatedAt": "0001-01-01T00:00:00Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/<myVolume>/_data",
        "Name": "<myVolume>",
        "Options": {},
        "Scope": "local"
    }
]
$ mkdir /mnt/<myVolume>
# if you already have data in your volume, you should copy it to `/mnt/<myVolume>` now
$ Sudo rm -rf /var/lib/docker/volumes/<myVolume>/_data
$ Sudo ln -s /mnt/<myVolume> /var/lib/docker/volumes/<myVolume>/_data

通常どおりボリュームを自由に使用してください(すべてのデータが/mntお望み通り)

7
Tom Mekken

local-persistドライバは、進むべき道です。しばらく更新されていません。 docker mountを使用して、ローカル(ホスト)ディレクトリをdockerコンテナーにマウントできます。

以下を実行すると、マウントされたディレクトリがデスクトップにマッピングされた新しいコンテナが作成されます。

mkdir extra-addons
docker run -it -v /Users/me/Desktop/extra-addons:/mnt/extra-addons busybox /bin/sh
ls

コンテナのルートにmntフォルダが表示されます。

bin dev etc home mnt proc root sys tmp usr var

コンテナに新しいファイルを作成する

touch /mnt/extra-addons/test.txt

ホストマシンにtest.txtファイルを作成します。指定されたパス。これは現在、双方向の読み取り/書き込み共有フォルダーです。複数のコンテナが同じフォルダをマウントできます。また、コンテナをシャットダウンすると保持されます。

enter image description here

4
Lex