2016-04-02 225 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