同一个码头集装箱上的多个虚拟主机

问题描述:

我试图在同一个Docker容器和端口上运行两个不同的域。同一个码头集装箱上的多个虚拟主机

Docker容器运行CentOS。 docker-compose.yml看起来像这样:

web: 
    image: fab/centos 
    ports: 
    - "80:80" 
    volumes: 
    - ./src/httpd.conf:/etc/httpd/conf/httpd.conf 
    - ./src:/var/www/html 
    - ./src/hosts:/etc/hosts 
    environment: 
    - VIRTUAL_HOST=dummy.dev,tests.dev 

我也是在主机上宣布的/etc/hosts内都.dev域名(OS X.)

这已经有一段时间,因为我配置了虚拟主机。我的理解是我只需要声明它们,并且Apache会根据请求的HTTP HOST自动提供正确的文件。

这是我有,加在httpd.conf末:

<VirtualHost *:80> # first host = default host 
    DocumentRoot /var/www/html/default 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/dummy 
    ServerName dummy.dev 
    ServerAdmin [email protected] 
    ErrorLog logs/dummy.dev-error_log 
    CustomLog logs/dummy.dev-access_log common 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/tests 
    ServerName tests.dev 
    ServerAdmin [email protected] 
    ErrorLog logs/tests.dev-error_log 
    CustomLog logs/tests.dev-access_log common 
</VirtualHost> 

然而,在实践中,无论是参观还是dummy.dev实际上tests.dev服务/var/www/html/default。这好像Apache没有意识到哪个主机被调用(虽然PHP中的$_SERVER的转储确实显示了预期的HTTP_HOST值,即:127.0.0.1,dummy.dev或tests.dev,具体取决于我访问的URL。 )

我错过了什么?

这是我不清楚这是否是一个Apache问题或码头工人之一。 (请注意,这是一个与如何在同一个域中以不同端口托管多个应用程序不同的问题,在我的情况下,我确实希望虚拟主机全部位于/位于同一个应用程序/端口/容器中。 )

原来这是Apache配置问题。

我需要明确地启用域命名virtualhosts,像这样:

NameVirtualHost *:80 

This answer helped.

泊坞无关此事。

fab/centos不公开搬运工枢纽存在,所以不知道为什么你所遇到的问题。

我的建议是退后一步,并努力使之与一个简单的例子工作。

docker search apache产生eboraas/apache因为大多数星号的形象,所以我将使用一个例子。

在测试目录中,使用您的样本:

文件:httpd.conf中

<VirtualHost *:80> # first host = default host 
    DocumentRoot /var/www/html/default 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/dummy 
    ServerName dummy.dev 
    ServerAdmin [email protected] 
    ErrorLog logs/dummy.dev-error_log 
    CustomLog logs/dummy.dev-access_log common 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/tests 
    ServerName tests.dev 
    ServerAdmin [email protected] 
    ErrorLog logs/tests.dev-error_log 
    CustomLog logs/tests.dev-access_log common 
</VirtualHost> 

然后创建虚拟主机网站&日志目录。

mkdir -p logs; for i in default tests dummy; do mkdir -p $i; echo "hello $i" > $i/index.html; done 

最后,运行docker。

docker run -it -v $(pwd):/var/www/html -v $(pwd)/httpd.conf:/etc/apache2/sites-available/000-default.conf -v $(pwd)/logs:/etc/apache2/logs -p 9090:80 --rm --name apache_c eboraas/apache 

请注意,我用的基本上是相同的卷,你在你的搬运工,compose.yml一样,不同的是我用site-available而不是改变httpd.conf中的。

要进行测试,请确保您有tests.dev和虚置。开发你的/ etc/hosts中在合适的泊坞窗IP指向和测试:

$> curl dummy.dev:9090 
hello dummy 
$> curl tests.dev:9090 
hello tests 

从这一点来说,建立在此之上,首先尝试的是您正在使用的泊坞窗apache的图像,然后用定制的尝试/ etc/hosts文件,然后将其放回到docker-compose文件中