ngrokをdocker composeで使う
はじめに
ngrokというサービスをDocker composeで導入する手順です。
PCに直接ngrokをインストールしてコマンドで起動する場合と少し勝手が違ったのでメモしておきます。
環境
- ngrok 3.5.0
- Docker Desktop for Windows
- docker composeを使って起動する
公開したいウェブサイト http://localhost がローカル上で閲覧可能な状態である前提です。
導入手順
アカウント登録
まずは、ngrokに登録をしてAuthtoken(認証用トークン)を取得します。
ngrok
https://ngrok.com/
docker-compose.yml にngrokを追加
以下のように追記します。(そのままコピペ可)
公式より引用
services: ngrok: image: ngrok/ngrok:latest restart: unless-stopped command: - "start" - "--all" - "--config" - "/etc/ngrok.yml" volumes: - ./ngrok.yml:/etc/ngrok.yml ports: - 4040:4040
ウェブサイトやDBコンテナは各々記入してください。
参考
Docker | ngrok documentation
https://ngrok.com/docs/using-ngrok-with/docker/
ngrok.yml の作成
ngrokの設定ファイルを作成します。
ngrok.ymlという名前で新規作成し、ルートディレクトリ(docker-compose.ymlと同じ階層)に置きます。
version: "2" authtoken: ここに取得したauthtoken tunnels: website: proto: http addr: host.docker.internal:80 host_header: rewrite
authtoken
とaddr
のポート部分を環境に合わせたものに書き換えて下さい。
参考(オプション)
Configuration File | ngrok documentation
https://ngrok.com/docs/agent/config/
余談
今回ここでハマりました。通常はaddr
にポートを指定するだけでいいと思うのですが、以下のようエラーで繋がりませんでした。
ERR_NGROK_8012
Traffic was successfully tunneled to the ngrok agent, but the agent failed to establish a connection to the upstream web service at localhost:80. The error encountered was:
dial tcp 127.0.0.1:80: connect: connection refused
addr
にhost.docker.internal
を指定しないと繋がらないようです。
公式ドキュメントから抜粋
Note: for MacOS or Windows users, the --net=host
option will not work. You will need to use the special url host.docker.internal
as described in the Docker networking documentation.
Google翻訳
注: MacOS または Windows ユーザーの場合、--net=host
オプションは機能しません。 Docker ネットワークのドキュメントで説明されているように、特別な URL host.docker.internal
を使用する必要があります。
また、80ポートを使う場合はhost_header
オプションにrewrite
の指定(localhost
でも可)が必要でした。指定しないと307 temporary redirect(リダイレクトのループエラー)が発生(汗)
このあたりよく理解できていないので理由がわかりません。。。自分の環境またはDockerの設定の問題かもしれませんが、同様のエラーが出ている方は参考にしてもらえれば。
起動
コンテナを起動します。
docker-compose up -d
正常に起動できていれば、以下のようなアドレスで外部に公開されているばずです。アドレスは起動する度に変わります。
https://xxx-xxx.xxx.xxx.xxx.ngrok-free.app/
公開アドレスは、以下のURLで確認できます。
ngrokにログインしてTunnels > Agents ページでも確認できます。
まとめ
とても便利で簡単に導入できるサービスですが、今回ちょっとハマってしまったのでメモを残しておきます。
-
前の記事
docker image prune したのにディスク空き容量が変わらない 2022.11.24
-
次の記事
記事がありません
コメントを書く