プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2022/06/15

Docker + Traefik で複数のポートを公開しているコンテナのルーティングを行う

event_note2022/06/14 23:26

ググってもなかなかサンプルが見当たらずかなりはまりました。

最終的には以下のページが参考になりました。

Docker + Traefik の基本的な設定は以前の記事をご覧ください。

環境

  • Docker 20.10.12
  • Traefik v2.7

イメージ図

やりたいことは以下のような感じです。

  • api1.localhost へのアクセスはポート3000へ
  • api2.localhost へのアクセスはポート4000へ

サンプル

簡単な解説をコメントに書いています。

ports:
  - 3000:3000
  - 4000:4000
labels:
  - traefik.enable=true
  #------------------------------
  # foo という名前のルーターを定義し、
  # エントリーポイント http (traefik側で設定した任意の名前) と関連付け
  - traefik.http.routers.foo.entrypoints=http
  # ルーター foo のホスト名を "api1.localhost" に設定
  - traefik.http.routers.foo.rule=Host(`api1.localhost`)
  # foo-service という名前のサービスを定義し、ルーター foo と関連付け
  - traefik.http.routers.foo.service=foo-service
  # foo-service へのアクセスをポート3000 へ飛ばす
  - traefik.http.services.foo-service.loadbalancer.server.port=3000
  #------------------------------
  - traefik.http.routers.bar.entrypoints=http
  - traefik.http.routers.bar.rule=Host(`api2.localhost`)
  - traefik.http.routers.bar.service=bar-service
  - traefik.http.services.bar-service.loadbalancer.server.port=4000

ports でホストのポートとマッピングしていますが、実際には expose でコンテナ側のポートを開けるだけのほうがよいと思います。