動作確認環境
- 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でも動くのでいいのですが、コンテナのビルドでこけたりして、まだ粗削りな印象を受けております。私だけかな?
ご参考まで!