久しぶりにDockerに触ってハマったこと。
以下のようにrunコマンドの-vオプションを渡すことで、コンテナとホストOS側でデータ共有できます。
$ docker run -v /host/dir:/container/dir ...
/host/dirの部分を絶対パスで指定する必要があります。
docker run -v ./host_dir:/container/dir ...
のような指定をするとエラーとなります。
$ docker run -v ./host_dir:/container_dir
docker: Error response from daemon: create ./host_dir: "./host_dir" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
See 'docker run --help'.
また、 docker run -v host_dir:/container/dir
のような指定をするとエラーにはなりませんが、container側にディレクトリが作成されるものの、ファイルシェアが行われません。
$ mkdir host_dir
$ echo hoge > host_dir/test
$ docker run -v host_dir:/container_dir xxxxx cat /container_dir/test
cat: /container_dir/test: No such file or directory
ということで冒頭書いたように、ホストOS側のディレクトリは絶対パスで指定しましょう。
$ mkdir host_dir
$ echo hoge > host_dir/test
$ docker run -v `pwd`/host_dir:/container_dir -t -i xxxxx cat /container_dir/test
hoge