Open3

docker-composeからngrokのコンテナを起動する

yellow-seedyellow-seed

https://ngrok.com/docs/using-ngrok-with/docker/

公式以外にはあまり資料がないので、とりあえずメモ程度に

まずはcompose.yml側

メインのappコンテナとnetworkを共有するようにしたうえで、ngrokのサービスの部分みたいに書けばよい

version: '3'
services:
    app:
        build: 
            context: .
            dockerfile: Dockerfile
        volumes:
            # Forwards the local Docker socket to the container.
            # - /var/run/docker.sock:/var/run/docker-host.sock 
            # Update this to wherever you want VS Code to mount the folder of your project
            - ../:/workspace:cached

        command: sleep infinity 
        ports:
            - 11111:11111
        env_file:
            - .env
        networks:
            - ngrok-net

    ngrok:
        image: ngrok/ngrok:latest
        depends_on:
          - app
        restart: unless-stopped
        command:
          - "start"
          - "--all"
          - "--config"
          - "/etc/ngrok.yml"
        volumes:
          - ./ngrok.yml:/etc/ngrok.yml
        ports:
          - 4040:4040
        networks:
          - ngrok-net

networks:
    ngrok-net:
      name: ngrok
yellow-seedyellow-seed

もう一つ必要なのことは、ngrok.ymlファイルを定義すること

ngrok http 11111 をyml化すると以下のような感じ

version: "2"
authtoken: your_auth_token # ngrokにログインすると確認できる認証情報トークン
console_ui: true   # コンソールUIを有効にするかどうか
web_addr: localhost:4040

tunnels:
  app:
    addr: app:11111   # 公開したいローカルのポート番号
    proto: http   # 使用するプロトコル (http, https, tcp, tls のいずれか)
yellow-seedyellow-seed

これでdocker-composeの起動と同じライフサイクルでngrokも起動するから、ローカルの動作確認でちょっとお手軽に

※AWS SAMの sam local start-apiと併せて使おうとしてみたが、この設定だけではうまくいかなかったので、今のところは普通のdocker-composeの起動では使えるよ、程度のレベル。