7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-21

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

関連ページ

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?