2017-05-04 98 views
3

我試圖在同一個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問題或碼頭工人之一。 (請注意,這是一個與如何在同一個域中以不同端口託管多個應用程序不同的問題,在我的情況下,我確實希望虛擬主機全部位於/位於同一個應用程序/端口/容器中。 )

回答

1

原來這是Apache配置問題。

我需要明確地啓用域命名virtualhosts,像這樣:

NameVirtualHost *:80 

This answer helped.

泊塢無關此事。

0

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文件中

相關問題