LoginSignup
3
1

More than 5 years have passed since last update.

Docker for Windows で絶対パスのシンボリックリンクを扱う

Posted at

動作確認環境

  • Windows 10 Pro 1803
  • Docker for Windows 18.06.1-ce-win73

TL;DR;

Dockerで完全にクロスプラットフォームな開発環境を楽々実現できる!
.
.
.
そう思っていた時期が私にもありました。
実のところ、Linux、Macだけならそう言ってもいい感はあります。
だが、Windows、テメーはダメだ。

今回はそんなWindows上のDockerで絶対パスのシンボリックリンクを扱うためのTips。
そもそも絶対パスなんて環境依存が激しいもの使うべきじゃない、というのはごもっとも。
でもレガシーなシステムのDocker化なんてやってると、こういうの、まれによくあるんですよね。

準備

GitHub前提です。
まずは正しくシンボリックリンクをcloneされるよう設定します。

以下を参考にしています。

Git for Windowsでシンボリックリンクを扱えるようにする
https://qiita.com/ucho/items/c5ea0beb8acf2f1e4772

  • Powershellからgitの設定
git config --global core.symlinks true

これでファイルシステムがNTFSならシンボリックリンクがシンボリックリンクとしてcloneされるための準備ができました。

  • cloneする

リンク先のように一般ユーザーにシンボリックリンクを作成する権限を付与するか、Powershellを管理者権限で起動します。
私はめんどくさかったので管理者権限で起動する方を選びました。

  • ハマりどころ

絶対パスのシンボリックリンクは当然リンク切れ状態になっていると思います。
それ自体は問題ありません。問題なのが、なぜかリンク先が以下のように変換されてしまうこと。

/var/www/htdocs
↓
/mnt/C:/var/www/htdocs

これではコンテナを起動したときに、コンテナの中から絶対パスのシンボリックリンクが正しく扱えません。

対策

DockerfileのRUNか、entry-point.shの中で以下を実行

mkdir /??
ln -s / /??/C:

なぜかわかりませんが、NTFS上で/mntだったものがコンテナの中だと/??になっちゃいます。
ためしにmkdirしてみたらフツーにできてしまいました。あとはシンボリックリンクを貼って終了。

ちなみに、WSL上でDockerを動かす方法や、WSLのgitでcloneする方法も試してみましたが、うまくいきませんでした。
WSLだけで完結すればWindows10Homeでも動くのでいいのですが、コンテナのビルドでこけたりして、まだ粗削りな印象を受けております。私だけかな?

ご参考まで!

3
1
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
3
1