Edited at

Windows PowerShell でカレントディレクトリのパスを Linux 形式で取得する

More than 1 year has passed since last update.

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 ファイルを使う方が便利そうです。


関連ページ