現在、一部のドッカー コンテナー用に Traefik を使用してロードバランサー/リバース プロキシをセットアップしようとしています。Treafik を構成して、いくつかのプレフィックス パスを使用してアプリを利用できるようにするのに問題があります。この例に基づいて、Docker と Docker Compose を使用して実行される基本的な Traefik 構成を取得できます。問題は、パスで「whoamI」コンテナーに到達できるようにすることはできますが、アプリや他のコンテナーには到達できないことです。
たとえば、whoamI コンテナーを開始する docker-compose ファイル (以下を参照) と、5 つの Portainer コンテナー (シナリオを再現できるようにするため) を作成しました。/wai
woamI は で、Portainer は で利用できると思い/portainer1
ます。
代わりに、Portainer ( 経由/wai
) ではなく、whoamI Web サーバー ( 経由) にアクセスでき/portainer1
ます。しかし、Portainer には で到達でき/portainer2
ます。これら 2 つの Traefik 構成の唯一の違いは、「Path」ではなく「PathStrip」を使用することです。ただし、厄介なのは、に移動するときに白いページしか取得できないこと/portainer2
です。ページのタイトルと一部の html のみが読み込まれます。また、予想される動作 (通常の Portainer ページ) を確認するために、ホスト マシンに公開される Portainer コンテナーも開始しました。下の添付画像もご覧ください。
編集:
興味深いことに、Portainer にも到達できますが/portainer4/
(ただし ではありません/portainer4
)、同じホワイト ページが表示されます。/portainer2/
とへの移動の違いは/portainer4/
、Traefik に追加のログが記録されていることです (以下を参照)。経由で Portainer に移動すると/portainer4/
、400 ステータスを示す余分な 3 行がログに表示されます。調査の結果、これはブラウザが追加のファイル (つまり、javascript ファイル、ファビコン、スタイルシート) を読み込もうとしたことが原因であることがわかりました。そのため、私のブラウザで Portainer にアクセスすると/portainer4/
、余分なファイルをフェッチする必要があることがわかり、そうしようとします (これは に移動するときには起こりません/portainer2
)。たとえば、に移動して自分でファイルにアクセスしようとすると/portainer4/ico/favicon.ico
、400 Bad Request
. 最後に、に移動するとき/portainer2/ico/favicon.ico
は参照してください404 page not found
。
これらの結果に基づいて、私は疑問に思っています:
- /portainer1 では Portainer にアクセスできず、代わりに /portainer2 にアクセスできるのはなぜですか?
- /portainer2 に移動すると、Portainer ページ全体が表示されないのはなぜですか?
/portainer2/
と の間でファイル (ファビコンなど) へのアクセスに動作の違いがある理由/portainer4/
- 400 Bad Request の実際の意味と、この問題を修正できるかどうか/どのように修正できるか
正しい方向へのいくつかの指針を本当に感謝します
docker-compose.yml:
version: '2'
services:
traefik:
container_name: traefik
image: traefik
command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /dev/null:/traefik.toml
labels:
- "traefik.enable=false"
whoami:
image: emilevauge/whoami
labels:
- "traefik.backend=whoami"
- "traefik.frontend.rule=Path: /wai/"
portainer1:
image: portainer/portainer
labels:
- "traefik.backend=portainer1"
- "traefik.frontend.rule=Path: /portainer1/"
portainer2:
image: portainer/portainer
labels:
- "traefik.backend=portainer2"
- "traefik.frontend.rule=PathStrip: /portainer2/"
portainer:
image: portainer/portainer
ports:
- "9000:9000"
labels:
- "traefik.enable=false"
/wai
、/portainer1/
、<myIP>/portainer2/
、/portainer3/
およびにそれぞれアクセスした後に生成される追加の Traefik ログ/portainer4/
:
time="2017-01-13T14:33:16Z" level=debug msg="Round trip: http://172.19.0.2:80, code: 200, duration: 1.000627ms"
time="2017-01-13T14:33:22Z" level=debug msg="Round trip: http://172.19.0.7:9000, code: 404, duration: 1.006089ms"
time="2017-01-13T14:33:24Z" level=debug msg="Round trip: http://172.19.0.3:9000, code: 200, duration: 1.160158ms"
time="2017-01-13T14:33:26Z" level=debug msg="Round trip: http://172.20.0.5:9000, code: 404, duration: 1.291309ms"
time="2017-01-13T14:33:29Z" level=debug msg="Round trip: http://172.20.0.4:9000, code: 200, duration: 2.788462ms"
time="2017-01-13T14:33:29Z" level=debug msg="Round trip: http://172.20.0.4:9000, code: 400, duration: 777.073µs"
time="2017-01-13T14:33:30Z" level=debug msg="Round trip: http://172.20.0.4:9000, code: 400, duration: 1.780621ms"
time="2017-01-13T14:33:30Z" level=debug msg="Round trip: http://172.20.0.4:9000, code: 400, duration: 1.780341ms"