説明
Hyper-V 経由で Windows 10 で Docker バージョン 1.12.5 を使用しており、コンテナー実行可能ファイルを現在のパスのコマンドとして使用したいと考えています。正常に動作する Docker イメージを作成しましたが、現在のパスをマウントする際に問題が発生します。エイリアスを作成してコマンドを実行し、docker run --rm [...]
現在のディレクトリでシステム全体で使用できるようにするというアイデアです。
設定
ドライブ E に「test」フォルダーがあり、その中にコマンドが動作していることを示す「folder on windows host」というフォルダーがあります。Dockerfile はディレクトリを作成し/data
、それを VOLUME および WORKDIR として定義します。
PowerShell で現在のディレクトリとして、絶対パスで Docker コマンドを実行するとE:\test
、次の内容が表示されますE:\test
。
PS E:\test> docker run --rm -it -v E:\test:/data mirkohaaser/docker-clitools ls -la
total 0
drwxr-xr-x 2 root root 0 Jan 4 11:45 .
drwxr-xr-x 2 root root 0 Jan 5 12:17 folder on windows host
問題
絶対表記ではなく現在のディレクトリを使用したいのですが、異なるエラー メッセージのためボリューム内で pwd を使用できませんでした。
($pwd) で試す
PS E:\test> docker run --rm -it -v ($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: ":/data" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
/($pwd) で試してみる
PS E:\test> docker run --rm -it -v /($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: "E:\\test" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
\´pwd\´で試す
PS E:\test> docker run --rm -it -v ´$pwd´:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Invalid bind mount spec "´E:\\test´:/data": invalid mode: /data.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
`pwd` で試してみる
PS E:\test> docker run --rm -it -v `$pwd`:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: create $pwd: "$pwd" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Windows 10 上の Docker で現在のディレクトリをボリュームとしてマウントする正しい構文は何ですか?
ベストアンサー1
Windows コマンドライン ( cmd
) では、次のように現在のディレクトリをマウントできます。
docker run --rm -it -v %cd%:/usr/src/project gcc:4.9
PowerShell では、 を使用する${PWD}
と、現在のディレクトリが表示されます。
docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9
Linuxの場合:
docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9
クロスプラットフォーム
次のオプションは、PowerShell と Linux (少なくとも Ubuntu) の両方で機能します。
docker run --rm -it -v ${PWD}:/usr/src/project gcc:4.9
docker run --rm -it -v $(pwd):/usr/src/project gcc:4.9