내 Windows 컴퓨터의 Ubuntu VM에서 Docker를 사용하여 Apache Tomcat과 Apache HTTP를 실행하고 있습니다. Tomcat(포트 8080에서 실행)에 대한 프록시 요청을 역방향으로 수행하도록 HTTP 서버(포트 80에서 실행)를 구성했습니다.
/etc/호스트:
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 애플리케이션이 작동하므로 DNS를 올바르게 확인하지 못하는 Apache HTTP 서버의 문제인 것처럼 보입니다.
참고로 내 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
답변1
네트워킹에 대한 기본 설정을 사용하여 두 개의 컨테이너를 만들었으므로 고려해야 할 몇 가지 사항이 있습니다.
- 기본적으로 IP 주소를 통해서만 통신할 수 있습니다.
- 이름 확인을 원할 경우
--link
컨테이너를 생성할 때 옵션을 사용해야 하며 각 방향으로 링크를 생성해야 합니다. - 컨테이너는 기본적으로 호스트
/etc/hosts
파일과 해당/etc/resolv.conf
파일의 설정을 사용하지만 루프백 주소에 대한 참조와 같은 일부 구성을 제거합니다. - 가능한 해결책 중 하나는 DNS 서버를 실행하는 세 번째 도커 컨테이너를 추가하고
--dns
두 컨테이너 모두에 옵션을 추가하는 것입니다. 그러나 이는 필요한 것보다 더 많은 소프트웨어를 도입하게 될 것입니다.
컨테이너의 DNS 이름과 IP 주소로 호스트의 파일을 채우거나 /etc/hosts
, DNS 이름 대신 IP 주소를 통해 다른 컨테이너를 참조하거나, ALIAS로만 참조하고 명령을 사용할 수 있습니다 --link
.
또한보십시오: -컨테이너 DNS 구성 -도커 컨테이너 네트워킹