Linux 形式のパスっていってもいろいろあると思うのですが、ここでは docker run
の -v
オプションに渡せる形式のパス (「/c/path/to/directory」 のような形式) を作ります。
- 参考 : Manage data in containers (ホストディレクトリをデータボリュームとしてマウントする方法)
PowerShell で Linux 形式のパスを取得する
PowerShell では、Get-Location
コマンドレットで現在のディレクトリを取得できます。 戻り値の型は PathInfo
です。 この値から、ドライブ名を取得して、パスの区切りをスラッシュにすることで、Linux 形式のパスを生成できます。
# Linux 形式のパスを文字列として取得。
$pwd = "/$((pwd).Drive.Name.ToLowerInvariant())/$((pwd).Path.Replace('\', '/').Substring(3))"
ちなみに、Get-Location
コマンドのエイリアスとして pwd
が使えるので、pwd
を使っています。
以下のように、Linux 形式のパスを取得する関数を用意してもいいですね。
# Windows で Linux 形式のパスを作る (docker run 時の -v オプションに渡すにはこの形式が必要)
function pwd_as_linux {
"/$((pwd).Drive.Name.ToLowerInvariant())/$((pwd).Path.Replace('\', '/').Substring(3))"
}
Docker コマンドで使う
上記の関数を用意しておけば、docker
コマンドを呼び出すときに、データボリュームとしてマウントするホストディレクトリを相対パスで指定 (?) できます。
docker run --workdir /app -v "$(pwd_as_linux)/resources:/app/resources" ubuntu bash
Compose ファイルなら相対パスを使用できる
docker run
の -v
オプションに渡すにはホストディレクトリの絶対パスを指定する必要がありますが、Compose ファイルでボリュームを指定する場合は相対パスで指定できます。
特定のプロジェクトで使用する Docker コンテナで、プロジェクトのディレクトリ内の特定のディレクトリをデータボリュームとしてマウントしたい、というような場合は Compose ファイルを使う方が便利そうです。
関連ページ
- PowerShell (Windows) で Docker コンテナにホストディレクトリをデータボリュームとしてマウントする際に pwd 相当のことをしたい : 投稿してから、前に同じことをブログに書いてたことに気づいた……。