我正在运行两个 docker 容器,使用以下 docker-composer 脚本:
db:
image: cofoundry/mysql
environment:
- MYSQL_USER=wordpress
- MYSQL_PASS=wordpress
- MYSQL_DB=wordpress
ports:
- "3306:3306"
privileged: true
web:
image: cofoundry/nginx-phpfpm
volumes:
- ../bedrock:/app
environment:
- DOCROOT=/app/web
links:
- db
ports:
- "80:80"
privileged: true
但是我无法找到如何为不同的站点运行多个 nginx-phpfpm web 和 mysql 容器,例如 web_1 - db_1、web_2 - db_2 等?
此外,我还更改了 /etc/hosts 文件以列出所需的所有域,使用 boot2docker ip,但如何为它们运行容器?我无法在相同的端口 80 和 3306 上运行容器。
请提供建议,谢谢!
答案1
想象一下,网络端口是系统中某些服务的地址。那么,如果多个服务具有相同的地址,哪一个会收到“邮件”? :) 问题是只有一个进程可以绑定到某个网络端口。要解决 nginx 容器的问题,您必须配置一些前端代理(例如 haproxy)。您需要将其绑定到 :80 端口以接受所有传入连接。之后,在 haproxy.cfg 中定义 acls 和后端。例如:
acl web1 hdr_beg(Host) www.web1.com acl web2 hdr_beg(Host) www.some_other_web.com .... use_backend web1_backend if web1 use_backend web2_backend if web2 .... backend web1_backend ... server web1_server localhost:<random port of nginx container> backend web2_backend ... server web2_server localhost:<other random port of nginx container>
因此,当连接到:80 端口时,haproxy 会解析主机头并将连接代理到匹配的后端。
使用 MySQL,您可以为每个实例定义不同的绑定端口,并配置您的 php 应用程序以建立与所需端口的连接。例如:
web_1 would use db_1 (port 3306) web_2 would use db_2 (port 3307)
等等