[英]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.