TL;DR
$ sudo bash -c "$(dinghy env); ssh docker@$(dinghy ip) -i $DOCKER_CERT_PATH/id_rsa -L 443:localhost:443"
背景
Docker for Macだと IOが遅くて多少マシなdinghyを使ってる。
dinghyだと内部的にVirtualBoxでboot2dockerのVMが動いてるので、例えばホストの80番ポートをバインドすると、localhostではなくてVM上の80ポートがバインドされる。
IPアドレスは dinghy ip
コマンドで確認できるので、多くの場合は、 http://(dinghyのIPアドレス)
みたいなかんじでIPアドレス指定でアクセスするなり、 hoge.localdomain
みたいな適当なホスト名で /etc/hosts
に登録しておけば問題ない。
しかしながら、Google認証のOAuth2のリダイレクトのテストとかをローカルでやろうとすると、 https://localhost
みたいなURLでアクセスできないと困ることがある。Google認証のリダイレクトURLは正式なTLD (TopLevelDomain) ではない hoge.localdomain
みたいな 適当なドメイン名は登録できずエラーになる。ただしテスト用に localhost
は許可されているようだ。
やってみた
というわけで前置きが長くなったけど、 dinghyでも https://localhost
でアクセスしたい。
なんとなくVirtualBoxの設定でもできそうな気もしつつ、設定画面を眺めてもよくわからんかったので、SSHポートフォワードでやってみた。
最初443をポートフォワードすればよいんだから、こんなかんじかなーっと思ってやってみたけど、この方法はうまくいかない。
$ docker-machine ssh dinghy -L 443:localhost:443
一般ユーザ権限では1024以下のWell Knownポートがバインドできないからだ。
じゃあsudoすればよいかと思ったけど、これもうまくいかない。
$ sudo docker-machine ssh dinghy -L 443:localhost:443
sudoするとdinghyの環境変数が見えなくなる。
結論として、とりあえずこうすればポートフォワードできた。
$ sudo bash -c "$(dinghy env); ssh docker@$(dinghy ip) -i $DOCKER_CERT_PATH/id_rsa -L 443:localhost:443"
もっとスマートなやり方がありそうな気もするんだけど。