我有一个运行Apache的Docker容器,它当前正在侦听端口80。
我正试图在同一台服务器上运行另一个网站,这次使用Apache本机,也在监听端口80。
问题是,我不能让两个应用程序都监听同一个端口(Docker和Apache(。
我可以设置服务器的本地Apache安装,以便根据域名在内部将某些请求重定向到我的Docker容器吗?例如,Apache将监听端口80,对mycontainer.com
的请求将在内部传输到Docker将监听的端口9999
。
是的,你可以做到。我第一次想测试时,我就是这样做的,而且工作没有问题。
我们有一个运行到端口80的Apache容器,让我们调用另一个域,如mycontainer.com
,我们也想在端口80上访问它,但无法访问。
无论您如何运行这些容器,我指的是docker run
或docker-compose
,但关键是它们应该在同一网络中。
创建一个名为my_network
:的网络
docker network create my_network
我称第一个Apache为main,后者为the_name。
现在让我们在同一个网络中运行:
docker run --name main --network my_network httpd
docker run --name the_name --network my_network another_image
现在,您可以执行到the_name
容器中,并在Apache conf路径中创建一个domain.conf
文件,其中包含以下内容:
<VirtualHost *:80>
ServerName mycontainer.com
ProxyPreserveHost On
ProxyPass "/" "http://the_name:9999/"
ProxyPassReverse "/" "http://the_name:9999/"
ProxyRequests Off
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我想使用Apache命名的虚拟主机和Proxy Pass是可能的。你可以试试下面这样的东西。只需确保您启用了apachemod_proxy
。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName app-running-in-docker-container.com
ErrorLog "var/log/container_error_log"
CustomLog "var/log/container_access_log" common
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:999
ProxyPassReverse / http://127.0.0.1:999
</VirtualHost>
<VirtualHost *:80>
ServerName app-running-natively.com
DocumentRoot /path/to/project/doc/root
ErrorLog "var/log/nativelyapp_error_log"
CustomLog "var/log/nativelyapp_access_log" common
</VirtualHost>