UbuntuマシンでDockerを使用してApache TomcatおよびApache HTTPを実行していますVM私のWindowsマシン上。Tomcatへのプロキシリクエストをリバースする(ポート80で実行)ポート8080)。
/ etc/hosts:
127.0.0.1 localapp.com localhost
HTTP /conf/httpd.conf
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPass /app/api/ http://localapp.com:8080/api/
ProxyPassReverse /app/api/ http://localapp.com:8080/api/
</IfModule>
HTTP /conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/Apache2/htdocs/app"
ServerName localapp.com
<Directory "/usr/local/Apache2/htdocs/app">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/usr/local/Apache2/htdocs"
ServerName localhost
<Directory "/usr/local/Apache2/htdocs">
Require all granted
</Directory>
</VirtualHost>
HTTPアプリケーションを実行するか、localapp.com/apiディレクトリにアクセスしようとすると、DNSルックアップが失敗したという502応答が返されます。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>502 Proxy Error</title>
</head><body>
<h1>Proxy Error</h1>
<p>The proxy server received an invalid
response from an upstream server.<br />
The proxy server could not handle the request <em><a href="/api">GET /api</a></em>.<p>
Reason: <strong>DNS lookup failure for: localapp.com</strong></p></p>
</body></html>
なんらかの理由でApache HTTPのように自分自身をlocalapp.comにプロキシできないようです。ブラウザからlocalapp.com:8080/apiに直接アクセスすると、Tomcatアプリケーションが機能するため、Apache HTTPサーバーがDNSを正しく解決しないという問題のようです。
参考までに、私のnsswitch.confは次のとおりです。
passwd: compat
group: compat
shadow: compat
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
ネットワーク用のデフォルト設定で2つのコンテナーを作成したので、考慮すべき点がいくつかあります。
--link
オプションを使用する必要があり、各方向にリンクを作成する必要があります。/etc/hosts
ファイルとその/etc/resolv.conf
ファイルの設定を使用しますが、ループバックアドレスへの参照などの一部の構成を削除します。--dns
オプションを追加することです。しかし、これは必要以上のソフトウェアを導入することになります。ホスト上の/etc/hosts
ファイルにコンテナのDNS名とIPアドレスを入力するか、DNS名の代わりにIPアドレスを介して他のコンテナを参照するか、エイリアスのみで参照して--link
を使用できます。コマンド。
参照:- コンテナDNSの構成 - Dockerコンテナネットワーク