我正在尝试实现以下设置:
我有一个中心堆栈包含我的nginx代理的东西。 这个栈声明一个networking(我们称之为nginx_proxy_net )
接下来,我要为2个wordpress安装设置2个堆栈 ,每个堆栈都是独立的,并且包含自己的wordpress服务和mysql服务。 两个wordpress使用nginx_proxy_netnetworking。
当我尝试启动我的2个堆栈时,会发生以下情况:
Error response from daemon: rpc error: code = 3 desc = port '3306' is already in use by service 'mywp1_mysql' (qzcqsfvoj3ga2nte11rj3qgum) as an ingress port 我明白,每个导出的端口绑定在路由网格上 ,我也明白,你可以在多个networking上连接你的服务。 所以我试图为每个堆栈创build一个networking,所以在每个堆栈networking上都有一个MySQL和一个Apache / WordPress。
这里是我的Wordpress堆栈mywp1 docker docker-compose.yml :
version: "3" services: web: depends_on: - mysql image: wordpress:4.8-apache depends_on: - mysql ports: - 79:80 volumes: - ./data/wordpress:/var/www/html networks: - mywp1_webnet - nginx-proxy mysql: image: mysql ports: - 3306:3306 volumes: - ./data/mysql:/var/lib/mysql deploy: placement: constraints: [node.role == manager] networks: - mywp1_webnet networks: mywp1_webnet: nginx-proxy: external: name: nginx_proxy_default
这是mywp2
version: "3" services: web: depends_on: - mysql image: wordpress:4.8-apache depends_on: - mysql ports: - 78:80 volumes: - ./data/wordpress:/var/www/html networks: - mywp2_webnet - nginx-proxy mysql: image: mysql ports: - 3306:3306 volumes: - ./data/mysql:/var/lib/mysql deploy: placement: constraints: [node.role == manager] networks: - mywp2_webnet networks: mywp2_webnet: nginx-proxy: external: name: nginx_proxy_default
我对Docker并不是很有经验,所以也许我会问一些非常愚蠢的事情:是否有可能将我的端口暴露在我的堆栈networking中,而不是在入口处? 我希望尽可能保持默认值。
这里的问题是:是否有可能使用默认端口保持两个mysql实例,而不会相互干扰?
非常感谢,祝你有个愉快的一天
亚历克斯
您不需要在mywp * compose文件中发布端口。 您可以使用您的反向代理来访问网站,而不应该从容器外触及您的数据库。 Nginx代理对于单个节点集群来说是很好的,但是不确定它是否已经被更新为swarm模式,所以你可能想要考虑像swef的代理。
如果由于某种原因,您需要从群集外部直接连接到数据库,那么您需要为每个应用程序分配自己的端口。 在Docker之外不支持在同一个端口上运行多个应用程序,所以Docker内部也不支持。