ピックアップ
TraefikでDockerコンテナをリバースプロキシで試した件
Traefik
「トレーフィック」
を使ってみることで、
リバースプロキシ
などの基礎理解にも役立つかなと思って、
試してみることにした。
あくまで、
個人的な備忘録なので、
ChatGPT等に聞きながら、
自分なりに見返したいところだけ、
この記事にメモしてる。
前提環境 / 準備
環境としては、
Mac
を使って試した。
docker --versiondocker compose versionを準備。
それ以外の初期のTraefixの起動までは、
こちらで試した。
設定
version: '3.8'
services:
sample_admin:
build:
context: ./admin
container_name: sample_admin
ports:
- "9021:80"
volumes:
- ./admin/application:/var/www/html
networks:
- app-network
- traefik-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.sample-admin.rule=Host(`sample-admin.localhost`)"
- "traefik.http.routers.sample-admin.entrypoints=web"
sample_ui:
build:
context: ./ui
container_name: sample_ui
ports:
- "9022:9022"
volumes:
- ./ui/application:/var/www/html
networks:
- app-network
- traefik-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.sample-ui.rule=Host(`sample-ui.localhost`)"
- "traefik.http.routers.sample-ui.entrypoints=web"
sample_mysql:
image: mysql:8.0
container_name: sample_mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: sample_database
MYSQL_USER: sample_user
MYSQL_PASSWORD: sample_password
volumes:
- sample-mysql-data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
traefik-network:
driver: bridge
volumes:
sample-mysql-data:起動、確認
sudo docker-compose up -dコンテナを立ち上げたら、
http://sample-admin.localhost/これでアクセスできるはず。
しかし、
Gateway Timeoutとなってしまう。
Traefixに関して
version: "3.9"
services:
traefik:
image: traefik:v2.11
container_name: traefik
restart: always
command:
- --api.insecure=true
- --providers.docker=true
- --entrypoints.web.address=:80
- --log.level=DEBUG
ports:
- "80:80"
- "8080:8080" # dashboard 用
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- traefik-network
whoami:
image: traefik/whoami
platform: linux/amd64 # ← M1/M2/M3 Mac なら必須
container_name: whoami
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
- "traefik.http.routers.whoami.entrypoints=web"
networks:
- traefik-network
networks:
traefik-network:
external: trueで
- --log.level=DEBUGを追加すると、
docker logs -f traefikでログが確認できる。
これで確認したところ、
time="2025-11-08T07:28:19Z" level=debug
msg="'504 Gateway Timeout' caused by:
dial tcp 172.28.0.3:9022: i/o timeout"となっている。
ネットワークの問題?
ネットワークを確認する
docker network inspect traefik-networkこれ確認したら、
traefik-network に入っているのは traefik と whoami のみ で、
入れたかったコンテナが入っていない。
こちらは、
networks:
app-network:
driver: bridge
traefik-network:
external: trueですでにあるネットワークに入るようにして、
これで対応。
解決しない
[ブラウザ / ホスト]
|
| http://sample.localhost
v
[Traefik コンテナ]
| ← docker network 経由で sample にアクセス
v
[開発用 コンテナ: server 0.0.0.0:8080]この中で、
docker exec -it traefik shで入って、
curl http://sample:9022ではうまくいくので、
Traefik -> 開発用コンテナ
これは問題ないはず。
ブラウザ → Traefik
が問題あり、
Traefik が受け取ったリクエストを正しく oms_ui に送れていないか、
もしくは
Traefik がホスト側でリクエストを受けられていない可能性があるみたい。
ネットワークを1つに設定
コンテナを作る際に、
docker composeのためのymlファイルで、
networks:
- app-network
- traefik-network元のネットワークを残していたが、
networks:
- traefik-networkこのように、
Traefikのネットワークを残すようにすることで解決。
個人用ポイントメモ
Traefik がサービスを見つけるために必要なものは?
→ 同じ Docker ネットワーク に所属していて、Traefik 用の labels が付いていること。
ドメインによってバックエンドを切り替える仕組みの名前は?
→ リバースプロキシ(Traefik では Router が担当)。
Traefik がコンテナ内部のポート番号を知る必要がある理由は?
→ 受け取ったリクエストをどのサービスのどのポートへ転送するか決めるため。
おすすめ書籍
コメント一覧
コメントはまだありません。




コメントを残す