Posted at

dinghyでもSSHポートフォワードして `https://localhost` でアクセスできるようにする

More than 1 year has passed since last update.


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"

もっとスマートなやり方がありそうな気もするんだけど。