[英]Docker Nginx Reverse Proxy
我需要运行多个 WordPress 容器,这些容器全部链接到单个 MySQL 容器 + Nginx 反向代理,以便轻松处理 VIRTUAL_HOSTS。
这是我正在尝试做的事情(目前只有一个 WP):
我在 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 错误 ofc。
然后 192.168.99.100:8080 按预期将我带到 WordPress。
但是http://wordpress.mylocal.com它不起作用; 它没有重定向到 192.168.99.100:8080,我不明白我做错了什么。
有什么建议? 谢谢!
首先,我建议您开始使用 docker-compose ,运行您的容器并查找错误将变得更加容易。
至于您的情况,您似乎应该使用 VIRTUAL_PORT 来定向到 8080 上的容器。
其次,您不能将两个容器(nginx-proxy + wordpress)打盹到主机上的同一个端口。
祝你好运!
根据您的情况,我认为最适合您的解决方案是使用 nginx 反向代理,该代理侦听 docker 套接字并可以将请求传递给不同的虚拟主机。
例如,假设您有 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 个不同的 WP,端口暴露在 81 82 83 上。
现在在这里下载并启动这个 nginx docker 容器(反向代理) ,它应该监听 docker 套接字并检索端口 80 上到达您机器的所有数据。当您启动 WP 容器并通过您提供的环境变量时,他将能够检测哪个请求应该到达哪个 WP 实例......
这是您应该如何运行其中一个 WP docker 映像的示例
> docker run -e VIRTUAL_HOST=foo.bar1.com -p 81:80 -d wordpres:tag
在这种情况下,虚拟主机将是来自 http 请求的虚拟主机
一:
使用泊坞窗撰写。
vi docker-compose.yaml
二:
将其粘贴到文件中:
version: '3'
services:
nginx-proxy:
image: budry/jwilder-nginx-proxy-arm:0.6.0
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- certs:/etc/nginx/certs:ro
- confd:/etc/nginx/conf.d
- vhostd:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
labels:
- com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy
environment:
- DEFAULT_HOST=example2.com
networks:
- frontend
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion:stable
restart: always
volumes:
- certs:/etc/nginx/certs:rw
- confd:/etc/nginx/conf.d
- vhostd:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
# - LETSENCRYPT_SINGLE_DOMAIN_CERTS=true
# - LETSENCRYPT_RESTART_CONTAINER=true
- DEFAULT_EMAIL=example@mail.com
networks:
- frontend
depends_on:
- nginx-proxy
#########################################################
..The rest of the containers go here..
#########################################################
networks:
frontend:
driver: bridge
backend:
driver: bridge
volumes:
certs:
html:
vhostd:
confd:
dbdata:
maildata:
mailstate:
maillogs:
三:
根据需要配置尽可能多的 docker,并根据自己的喜好进行配置。 这里有些例子:
mysql (MariaDB):
mysql:
image: jsurf/rpi-mariadb:latest #MARIADB -> 10 #82eec62cce90
restart: always
environment:
MYSQL_DATABASE: nameExample
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_RANDOM_ROOT_PASSWORD: passwordRoot
MYSQL_ROOT_HOST: '%'
ports:
- "3306:3306"
networks:
- backend
command: --init-file /data/application/init.sql
volumes:
- /path_where_it_will_be_saved_on_your_machine/init.sql:/data/application/init.sql
- /physical_route/data:/var/lib/mysql
nginx-php7.4:
nginx_php:
image: tobi312/php:7.4-fpm-nginx-alpine-arm
hostname: example1.com
restart: always
expose:
- "80"
volumes:
- /physical_route:/var/www/html:rw
environment:
- VIRTUAL_HOST=example1.com
- LETSENCRYPT_HOST=example1.com
- LETSENCRYPT_EMAIL=example1@mail.com
- ENABLE_NGINX_REMOTEIP=1
- PHP_ERRORS=1
depends_on:
- nginx-proxy
- letsencrypt
- mysql
networks:
- frontend
- backend
WordPress:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=exampleuser
- WORDPRESS_DB_PASSWORD=examplepass
- WORDPRESS_DB_NAME=exampledb
- VIRTUAL_HOST=example2.com
- LETSENCRYPT_HOST=example2.com
- LETSENCRYPT_EMAIL=example2@mail.com
volumes:
- wordpress:/var/www/html #This must be added in the volumes label of step 2
您可以在此处找到许多示例和文档
您必须小心,因为在某些示例中我放置了用于rpi 的图像,它们很可能会在amd64和intel32系统中出现问题。您应该根据您的 CPU 和操作系统搜索并选择您感兴趣的图像
四:
运行此命令以启动所有泊坞窗
docker-compose up -d --remove-orphans
“--remove-orphans”用于删除不再存在于 docker-compose 文件中的 docker
五:
完成上述步骤后,您可以来询问您想要什么,我们将很乐意阅读您的 dockerFile,而不会因为尝试阅读大量命令而死
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.