2016-06-15 7 views
1

私は本当にドッカーVOLUMEの使い方に固執しています。私は普通のドッカーファイルを持っています:Dockerfile VOLUME not working

FROM ubuntu:latest 
VOLUME /foo/bar 
RUN touch /foo/bar/tmp.txt 

私は$ docker build -f dockerfile -t test .を実行しました。この後、私は作成されたtestイメージの実行に関連するドッカーコンテナにシェルをインタラクティブに実行しました。

作成され/foo/barが、空:つまり、私は$ docker run -it test

観察を走りました。

docker inspect testマウント情報:

"Volumes": { 
    "/foo/bar": {} 
} 

すべてでマウントされていないようです。仕事はかなりストレートなようですが、私は何か間違っていますか?

EDIT:このマウントされたボリュームディレクトリ内に作成されたデータを保持することを検討しています。

+2

[これは確立された動作です。](https://github.com/docker/docker/issues/3639) – jwodder

+0

@jwodderしたがって、私が作成したデータを永続化する方法はありますか? – darxtrix

+0

https://docs.docker.com/engine/userguide/containers/dockervolumes/ – user2915097

答えて

3

VOLUME命令は、RUNの後に配置する必要があります。 https://docs.docker.com/engine/reference/builder/#volumeで述べたように

注:それが宣言された後の任意のビルド手順は、ボリューム内のデータを変更した場合、それらの変更は破棄されます。

あなたは、ドッキングウィンドウrunコマンドによって作成されたボリュームのソースを知りたい場合は、次の

docker inspect --format='{{json .Mounts}}' yourcontainer 

は、このような出力が得られます:

[{ 
    "Name": "4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628", 
    "Source": "/var/lib/docker/volumes/4c6588293d9ced49d60366845fdbf44fac20721373a50a1b10299910056b2628/_data", 
    "Destination": "/foo/bar", 
    "Driver": "local", 
    "Mode": "", 
    "RW": true, 
    "Propagation": "" 
}] 

ソースはパスあなたが含まれています探しています。

+0

+1、私はボリュームが早い時期に宣言されたときに奇妙な動作を見たことがあります.1回のCOPY/ADDが含まれることがありますが、RUNの結果は含まれないことがあります。ビルドの後半にボリューム宣言を入れるのがベストです。 – BMitch

+0

感謝の男、私の日を救った! – darxtrix

+0

@michael_bitard、ホストディスク上のマウント位置を取得するにはどうすればよいですか? – darxtrix