我正在尝试在同一个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
我还在主机(OS X)上的/etc/hosts
内声明了两个.dev域名。
我配置虚拟主机已经有一段时间了。我的理解是我只需要声明它们,并且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 webmaster@dummy.dev
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 webmaster@tests.dev
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或者测试。 dev取决于我访问的URL。)
我错过了什么?
我不清楚这是Apache问题还是Docker问题。
(请注意,这是一个不同的问题,如何在不同端口的同一域上托管多个应用程序。在我的情况下,我确实希望虚拟主机全部在同一个应用程序/端口/容器内/上。)
答案 0 :(得分:2)
公共docker hub中不存在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 webmaster@dummy.dev
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 webmaster@tests.dev
ErrorLog logs/tests.dev-error_log
CustomLog logs/tests.dev-access_log common
</VirtualHost>
然后创建vhost网站&amp;日志目录。
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
请注意,我使用与您在docker-compose.yml中基本相同的卷,除了我使用site-available
而不是更改httpd.conf。
要测试,请确保/ etc / hosts中的tests.dev和dummy.dev指向正确的Docker IP并测试:
$> curl dummy.dev:9090
hello dummy
$> curl tests.dev:9090
hello tests
从这一点开始,首先尝试使用您正在使用的docker apache映像,然后尝试使用自定义/ etc / hosts文件,然后将其放回docker-compose文件中
答案 1 :(得分:2)
答案 2 :(得分:0)
在您的httpd配置中打开NameVirtualHost:
文件:/etc/httpd/conf/httpd.conf
NameVirtualHost *:80
NameVirtualHost *:443