現在私の会社でDocker-Composeを使用して開発スタックを実行しており、アプリケーションをコーディングするために必要なものすべてを開発者に提供しています。Docker nginx-proxy:コンテナ間のプロキシ
それは具体的には含まれています:
- Gitlabコンテナ(sameersbn/gitlab)プライベートGitリポジトリを管理するために、
- ジェンキンスコンテナ(library/jenkins)建物と継続的な統合のために、
- Archivaコンテナ(ninjaben/archiva-docker )を使用してMavenリポジトリを管理します。 HTTPS経由のサービスを確保するために
、そして外の世界にさらす、私はにコンテナに環境変数を使用して自動化されたnginxのプロキシの設定を可能にする優れたnginxのプロキシコンテナ(jwilder/nginx-proxy)、および自動化されたHTTPをインストールHTTPSリダイレクト。
DNSは、ドッキングされたサービスの各パブリックURLをホストのIPにマッピングするように構成されています。すべてが期待どおりに動作しますが、開発者のワークステーション用
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /var/config/nginx-proxy/certs:/etc/nginx/certs:ro
postgresql:
# Configuration of postgresql container ...
gitlab:
image: sameersbn/gitlab
ports:
- "10022:22"
volumes:
- /var/data/gitlab:/home/git/data
environment:
# Bunch of environment variables ...
- VIRTUAL_HOST=gitlab.my-domain.com
- VIRTUAL_PORT=80
- CERT_NAME=star.my-domain.com
archiva:
image: ninjaben/archiva-docker
volumes:
- /var/data/archiva:/var/archiva
environment:
- VIRTUAL_HOST=archiva.my-domain.com
- VIRTUAL_PORT=8080
- CERT_NAME=star.my-domain.com
jenkins:
image: jenkins
volumes:
- /var/data/jenkins:/var/jenkins_home
environment:
- VIRTUAL_HOST=jenkins.my-domain.com
- VIRTUAL_PORT=8080
- CERT_NAME=star.my-domain.com
:
は最後に、ドッカー・作曲を使用して、私のドッキングウィンドウ-compose.ymlファイルは、次のようになります。差額サービスにはhttps://gitlab.my-domain.com
,https://repo.my-domain.com
およびhttps://jenkins.my-domain.com
でアクセスできます。
ドッキングサービスの1つが別のドッキングサービスにアクセスすると問題が発生します。たとえば、jenkins dockerからhttps://archiva.my-domain.com
にアクセスしようとすると、プロキシからタイムアウトエラーが発生します。
archiva.my-domain.com
がドッカーコンテナからパブリックホストIPとして解決されても、ドッキングされたサービスからの要求はnginx-proxyによってプロキシされていないようです。
私が理解する限り、docker-nginxはホストネットワークからの要求を処理しますが、内部コンテナネットワークからの要求(Docker-Composeスタックの_dockerconfig_default_)は気にしません。
なぜ、私はコンテナからプロキシを使用する必要があると言えるでしょうか?もちろん、私はJenkinsコンテナからURL http://archiva:8080
を使用することができ、それはうまくいくでしょう。しかし、この種の設定はスケーラブルではありません。
たとえば、Gradleビルドを使用して1つのアプリケーションをコンパイルすると、build.gradleは自分のプライベートリポジトリをhttps://archiva.my-domain.com
で宣言する必要があります。ビルドはなく、ジェンキンスコンテナを通じて、開発者のワークステーションから起動された場合は
もう一つの例は、同じURL GitLab認証は両方利用可能にする必要があるのOAuth GitLabサービスによるジェンキンスで認証です...動作します外側から、そしてジェンキンスの容器の中から。
私の質問はここにあります:コンテナから別のコンテナへのリクエストをプロキシするようにnginx-proxyを設定するにはどうすればいいですか?
私はこの問題について議論していませんでしたが、nginx設定で解決策を構築するのに十分な問題はありません。
本当にありがとうございます。
質問に関連していなかったため、私の回答は削除されました。私は 'nginx-proxy'の作者からドッカーの作文に関する情報をここに残しています。 _現在、これはdocker-composeの新しいv2構文では機能しません(新しいネットワークオーバーレイと互換性がないため#304を参照)。これは、古いドッカー - コンポーザーの構文を使用して動作します._ – Marcs
ドッカーホスト上のiptablesとルーティング設定を確認してください。さらに、ドッカープロキシ(ホスト上のポートバインディングサービス)とnginx-proxyがどのインターフェイスをリッスンしているかを確認します。ファイアウォールのルールのために、コンテナがホスト上のポートに接続することが許可されていないというのは良いことです。あなたはまた、ナットとマンガのiptablesをチェックしていることを確認してください。 – BMitch
内部で通信する必要のあるコンテナにリンクする必要があります。 – Rao