結論
相対パスの先頭に$PWD
を付けることで解決できます。
現象
docker run
のVolumeを相対パス指定がしたい。
なぜなら、例えばGitHubのREADME.md
のUsageを書くときに、「このファイルのあるディレクトリ上で以下のコマンドを実行してね」という形で実行コマンドを書きたいからです。絶対パスで記述してしまうと、そのまま使えないのです。
ところが・・・
$ docker build -t original_ubuntu . # dockerbuildファイルが現在いるディレクトリ内に存在しているものとする
$ docker run -it -v .:/temp original_ubuntu
docker: Error response from daemon: create .: volume name is too short, names should be at least two alphanumeric characters.
See 'docker run --help'.
ひえぇ〜😅
どうやら、-v
のホスト側ディレクトリは絶対パスもしくは名前を指定するということで、相対パスの指定はできないようです。
(参考: http://docs.docker.jp/engine/reference/run.html#volume )
解決法
(簡単)$PWD
をつける
相対パスの冒頭に環境変数$PWD
を付ければ解決できます。
$ docker run -it -v $PWD:/temp original_ubuntu
MacOSXやUbuntuなどでは、環境変数$PWD
によって実行中のディレクトリの絶対パスを取得できるのを利用しています。
なお、万が一、環境変数$PWD
が設定されていないOS上で実行する場合は、上述の$PWD
を$(pwd)
に置き換えてください。
docker-compose
を使う
docker-compose
のvolumes
を使えば解決できます。(これだけのために使うのは変ですが。。。)
具体的には、まずdocker-compose
をインストールします。(詳細な説明は省略します。)
次に、dockerfile
と同じディレクトリにdocker-compose.yml
を用意します。
version: "3"
services:
main:
build:
context: .
dockerfile: dockerfile
container_name: original_ubuntu
volumes:
- ./:/temp
最後に、以下のコマンドを実行すれば、起動します。
$ docker-compose run main
最後に
大きなプロジェクトでは環境変数などでパスの管理をする方が良いのでしょうが、
小さなプロジェクトやテスト的に色々試してみた結果を残したいときに是非お使いください。