繁体   English   中英

Docker Nginx 反向代理

[英]Docker Nginx Reverse Proxy

我需要运行多个 WordPress 容器,这些容器全部链接到单个 MySQL 容器 + Nginx 反向代理,以便轻松处理 VIRTUAL_HOSTS。

这是我正在尝试做的事情(目前只有一个 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 错误 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 的图像,它们很可能会在amd64intel32系统中出现问题。您应该根据您的 CPU 和操作系统搜索并选择您感兴趣的图像

四:
运行此命令以启动所有泊坞窗

docker-compose up -d --remove-orphans

“--remove-orphans”用于删除不再存在于 docker-compose 文件中的 docker

五:
完成上述步骤后,您可以来询问您想要什么,我们将很乐意阅读您的 dockerFile,而不会因为尝试阅读大量命令而死

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM