2017-03-01 3 views
4

をダイナミックIPアドレスが時間の経過と共に変化する可能性のあるDockerコンテナの前でリバースプロキシとして使用する場合、traefikにはdocker backenddockerバックエンドを使用したtraefikリバースプロキシ - traefikのconfigファイルのフロントエンドルールをコンテナラベルなしで設定する

最初に、特別な設定ファイルなしでdockerモードでtraefikを開始し、ホストネットワークモードを有効にします(オプションで、traefikはホスト上のすべてのDockerネットワークを見ることができます)。必要に応じて)、Docker unixソケットをマウントして、traefikがコンテナの開始と停止を聞くことができるようにします。

その後
docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v /dev/null/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug 

、別のコンテナを起動し、少なくともlabels次のように設定します。

  • traefik.backend: "いくつかの-バックエンド名"
  • traefik.frontend.rule:「ホスト:localhostを;方法:「GET(またはものは何でもあなたのルールがある)
  • traefik.port:80(またはお使いのコンテナが内部的に公開するものは何でもポート)

例:

docker run --rm --name nginx -l traefik.backend="some-backend-name" -l traefik.frontend.rule="Host: localhost; Method: GET" -l traefik.port="80 nginx 

その後、curl localhostをやって、一つは、それが要求を取り、nginxのコンテナにルーティングされtraefikコンテナのログに見ることができます。

これまでのところ、アプリケーション自体の中で逆プロキシ転送ルール(例えば、転送ホスト:some.host.nameをコンテナxxxに設定する必要があるという事実は気に入らない私のドッカーがコンテナ、ラベルなどを設定するファイルは通常配置されています)。むしろ、これをアプリケーションから切り離して、代わりにtraefikの設定の一部として設定したいと思います。

これはどういうことですか?私が試したことは例のnginxのコンテナからtraefik.frontend.ruleラベルを除外し、代わりにtraefikために以下の構成ファイルをマウントしている:

[frontends] 
    [frontends.frontend1] 
    backend = "some-backend-name" 
    [frontends.frontend1.routes.test_1] 
    rule = "Host: localhost; Method: GET" 

traefikための起動コマンドは、このようになった:

docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug 

はしかし、これはありませんnginxコンテナからのバックエンドラベルを持つ設定ファイルからフロントエンドルールを添付していないようです。 curl localhost404/Not foundエラーを返すようになりました。

答えて

0

これはおそらく操作の問題です。 config(debug = true)のデバッグログを有効にすると、traefikはまず設定ファイルのフロントエンドルールを解析し、後でドッカーで動作しているものに基づいてフロントエンドとバックエンドを生成します。

これは、configのフロントエンドが作成されたときにドッカーのバックエンドが存在せず、投げられてエラーが発生することを意味します。

解決策の1つは、ルール設定を別のファイル(たとえば、rules.tomlとしてshown in the docs)に置き、watch = trueディレクティブを設定に追加することです。つまり、そこに定義するフロントエンドルールは、ドッカーからのバックエンドが生成された後に更新されます。

これは、あまり望ましい機能ではないため、おそらくバグを提出する必要があります。

+0

入力いただきありがとうございます。しかし、これを試みると、結果はまったく同じです。この事例を見つけた場合は、教えてください。 – Dirk

1

ウォッチフラグは、最初に変更されたrule.tomlの条件でのみ動作するようです。

あなたのケースでは、あなたのルールをetcdやzookeeperに更新するサービスを書くことをお勧めします。 etcd内のtradik configureを変更して更新します。

関連する問題