2016-04-02 275 views
1

我需要運行多個WordPress容器鏈接到一個單一的MySQL容器+ Nginx反向代理,以便於處理VIRTUAL_HOSTS。Docker Nginx反向代理

這裏是我想要(現在只有一個WP)做:

  • WordPress的(hub.docker.com/_/wordpress/)
  • 的Mysql(hub.docker。 COM/_/mysql /下)
  • Nginx的反向代理(github.com/jwilder/nginx-proxy)

我工作的OSX,這是我在終端運行:

docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy 
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest 
docker run -e VIRTUAL_HOST=wordpress.mylocal.com --name wordpress --link some-mysql:mysql -p 8080:80 -d wordpress 

我的Docker在192.168.99.100上運行,這使我得到了503的nginx/1.9.12錯誤。

然後192.168.99.100:8080使我如預期的那樣進入WordPress。

但是http://wordpress.mylocal.com它不工作;它不是重定向到192.168.99.100:8080,我不明白我在做什麼錯。

有什麼建議嗎?謝謝!

+0

虛擬主機端口8080,讓nginx直接路由到容器,而不是通過主機。 – tpbowden

+0

嘗試沒有暴露8080,但仍然是相同的結果:( 正如這裏描述的'github.com/jwilder/nginx-proxy'的容器需要公開端口 – Kianda

+0

容器需要*公開端口,但沒有必要*發佈*他們(所以,你可以刪除'-p 8080:80'(和'-p 3306:3306',如果你不使用外部工具連接到MySQL)。你有一個通配符DNS設置,或者編輯您的主機文件,使「wordpress.mylocal.com」解析爲192.168.99.100? – thaJeztah

回答

1

首先,我建議你開始使用docker-compose,運行你的容器,發現錯誤將變得更容易。

至於你的情況看來,你應該使用VIRTUAL_PORT直接到您的容器上8080

其次,你不能有兩個容器(nginx的代理+ WordPress的)枕在同一端口的主機上。

祝你好運!

+0

基本上你不能在同一個端口上運行任何容器,就好像你已經有一個容器運行在同一個端口上一樣 – user4860092

+1

這是正確的,那就是代理幫助它可以發送你的請求根據url查詢正確的容器,並使用VIRTUAL_PORT參數將其指向正確的容器。 –

0

根據您的情況,我認爲最適合您的解決方案是使用在docker套接字上偵聽的nginx反向代理,並且可以將請求傳遞給不同的虛擬主機。例如,我們假設你有3個WP。

WP1 -> port binding to 81:80 
WP2 -> port binding to 82:80 
WP3 -> port binding to 83:80 

對於它們中的每一個,都應該使用docker環境變量和要使用的虛擬主機名稱。

WP1-> foo.bar1 
WP2-> foo.bar2 
WP3-> foo.bar3 

這樣做之後,你應該有3與暴露在81 82 83

現在端口下載和啓動這個nginx的泊塢窗容器(反向代理)here 應該聽泊塢窗插座和不同的充WP在端口80上檢索傳送給你機器的所有數據。 當你啓動WP容器和你提供的環境變量時,他將能夠檢測到哪個請求被傳送給哪個WP實例...

這是你應該如何運行的,你一個WP泊塢窗圖像

> docker run -e VIRTUAL_HOST=foo.bar1.com -p 81:80 -d wordpres:tag 

在這種情況下,例如虛擬主機會從HTTP請求來嘗試沒有揭露的WordPress