1. ホーム
  2. linux

[解決済み] Dockerで単一ファイルボリュームをディレクトリとしてマウントする

2023-04-23 07:49:03

質問

Dockerのドキュメント には、Dockerコンテナに1つのファイルをマウントすることが可能であると書かれています。

vフラグは、ホストマシンからディレクトリではなく、単一のファイルをマウントするために使用することもできます。

$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

これにより、新しいコンテナで bash シェルに入り、ホストから bash の履歴を持ち、コンテナを終了すると、コンテナにいる間に入力したコマンドの履歴がホストに残ります。

しかし、私がそれを試みるとき、ファイルはディレクトリとしてマウントされます。

tom@u ~/project $ docker run --rm -it -v file.json:/file.json test
total 80K
drwxr-xr-x  9 root root 4.0K Dec  7 12:58 .
drwxr-xr-x 63 root root 4.0K Dec  7 12:58 ..
drwxr-xr-x  2 root root 4.0K Dec  4 16:10 file.json

私のDockerfileはこのような感じです。

FROM ubuntu:14.04
MAINTAINER Tom
CMD ["ls", "-lah", "/test"]

Dockerのバージョンは1.9.1、ビルドはa34a1d5です。

これはドキュメントの問題なのか、私の側の誤解なのか、それとも他に何かあるのでしょうか?

どのように解決するのですか?

test は、' 'でビルドした画像の名前です。 docker build -t test '、ではなく /test フォルダーではありません。

を試してみてください。 Dockerfile を使ってみてください。

CMD ["ls", "-lah", "/"]
or
CMD ["cat", "/file.json"]

そして

docker run --rm -it -v $(pwd)/file.json:/file.json test

を使うことに注意してください。 $(pwd) を使うことに注意してください(相対パスはサポートされていません)。

を使うことで $(pwd) を使用すると、存在しないかもしれないファイル名やパスとは対照的に、存在し、ケースを尊重する絶対パスを得ることができます。

存在しないホスト パスは、コンテナー内のフォルダーとしてマウントされます。