2016-12-02 5 views
0

私はいくつかのドッカーコンテナでうまいTræfɪkリバースプロキシを試しています。シンプルなTræfɪkリバースプロキシのインストール

ここに私のTræfɪkドッキングウィンドウ-compose.ymlさ:

version: '2' 
services: 
    traefik: 
    image: traefik 
    command: --web --docker --docker.domain=my-domain.net --logLevel=DEBUG 
    ports: 
     - "80:80" 
     - "8080:8080" 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
     - /dev/null:/traefik.toml 

ここでは私のサービスのドッキングウィンドウ-compose.yml Webパーツです:

version: '2' 
services: 
    # [...] 
    web: 
    build: . # An nginx based image 
    container_name: my_app_web 
    volumes: 
     - ..:/app/ 
    depends_on: 
     - db 
     - redis 
    labels: 
     - "traefik.backend=my_app" 
     - "traefik.frontend.rule=Host:my-domain.net" 
     - "traefik.port=80" 

すべてこのようなものを起動します、私はフロントエンド/バックエンドがTræfɪkのWeb UI上に作成されているのを見ていますが、my-domain.netで自分のアプリにアクセスすることはできません。

$ curl -H Host:my-domain.net http://127.0.0.1 
# ... after ±30s. 
Gateway Timeout 

ログインTræfɪk:ダイヤルTCP 172.18.0.4:80:ERR http://172.18.0.4:80

エラー転送、I/Oのタイムアウト

私はそれからのアプリケーションがローカルIPのアクセスすることができますしかし(172.18.0.4)それはうまくいきます。

私はここに何か助けを忘れていますか?


追加情報:

  • 公式emilevauge/whoamiは別のドッキングウィンドウ・コンファイルに正常に動作しています。
  • あなたはバックエンドとしてドッキングウィンドウでtraefik実行すると私のサービスは
+0

ウェブアプリケーション用のDockerfileと、docker-compose.ymlの完全なスニペットを提供してください。 –

+0

複数のネットワークでいくつかのコンテナを実行していますか?ネットワークtraefikがコンテナを探すラベルを追加する必要があります。それ以外の場合は、ゲートウェイのタイムアウトも表示されます。完全な作成ファイルを提供してください。 –

答えて

0

のためには、私はコンテナを検査し、それが別のネットワークに私Traefikと私のサービスを示しました。

私は、デフォルトではドッカーが常にブリッジモードを使用していると思っていましたが、v2から始まるcompose networkingではこれ以上のようには見えません。ドッカー作成ファイルのネットワークを作成しています(プロジェクト名に基づいています)。

したがって、v2を作成するには、通信する必要のある両方のdocker-composeファイルで共通のネットワークを指定する必要があります。

version: '2' 
services: 
    # ... 
    web: 
    # ... 
    labels: 
     - "traefik.backend=my_app" 
     - "traefik.frontend.rule=Host:my-domain.net" 
     - "traefik.port=80" 

networks: 
    default: 
    external: 
     name: traefik_default 

追加情報:私は、ドッキングウィンドウ・コンv1のファイルを定義したため

Traefikがemilevauge/whoamiで罰金働いていた。ここ

、私は単にtraefikのために生成されたものを使用しましたそれはブリッジモードを使用していました。

1

(ポート80をマッピングすることによって)Træfɪkせずに正常に動作している、あなたのwebコンテナからのポートを公開する必要はありません。したがって、あなたの作成ファイルのwebサービスからportsセクションを削除することは安全です。

両方のサービスを同じ作成ファイルから実行していますか? traefikコンテナがWebコンテナにアクセスできることを確認する必要があります。これは、同じ構成ファイルから両方を実行している場合、または2つのコンテナを同じネットワークに接続している場合に機能します。

タイムアウトの可能性として、Webコンテナが複数のポートを公開している可能性があります(Dockerファイルを見てください)。この場合、traefikに要求をマップするポートを明示的に指示する必要があります。あなたの場合、これは"traefik.port=80"でなければなりません。

非常に基本的なセットアップを実行しており、既にラベルを使用してドメインを設定しているので、特別な設定を行う必要はありません。 very basic docsのように、/dev/nullをtomlファイルとしてマウントするだけで、デフォルトをチェックしてください。traefikサービスについては

volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
    - /dev/null:/traefik.toml 

@AndreasJägleによって示唆されるように、Webサービス

labels: 
    - "traefik.backend=my_app" 
    - "traefik.frontend.rule=Host:my-domain.net" 
    - "traefik.port=80" 
+0

詳細な回答ありがとうございます。実際、私は自分のサービスにポートマッピングを定義する必要はないことを発見しました。また実際に私のコンテナは追加のポートを公開していました。私は 'traefik.port'で正しいポートを指定しました。質問が更新されました。しかし、私はまだタイムアウトを取得しており、ログは私のサービス(nginx)に届いていません –

+0

私はちょうど公式の 'emilevauge/whoami'という小さな画像を別々のドッカー作成ファイルに入れてみました。私のイメージはTraefikなしでうまくいきます。私はそれをデバッグする方法を知らない。 –

+1

'docker network ls'と' docker network inspect 'の出力を、あなたの作成ファイルが置かれているフォルダのように呼び出すことができますか?(例えば、mytest_defaultという名前のネットワークの場合、 -テスト)。私は容器が互いに届くことができないと仮定します。 –

関連する問題