【问题标题】:Docker Nginx Reverse Proxy Bad Gateway using wordpress and mysql containers使用 wordpress 和 mysql 容器的 Docker Nginx 反向代理坏网关
【发布时间】:2018-07-08 21:19:37
【问题描述】:

我也搜索其他问题,但它们不适合我。 (Docker nginx reverse proxy gives "502 Bad Gateway"docker nginx 502 bad gateway)

在我的情况下, 我按照给定的方式将 docker-ce 安装到我的个人 VPS 服务器:

Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Wed Jun 20 21:43:51 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Wed Jun 20 21:42:00 2018
  OS/Arch:      linux/amd64
  Experimental: false

然后

拉取标准最新版wordpress, mysqljwilder/nginx反向代理

并使用给定的标准代码

MYSQL:

docker run --name myweb_com_mysql -v /opt/docker-volumes/myweb_com_mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="myweb41#D_fG" --restart unless-stopped -d mysql

WordPress :

docker run --name myweb_com_wordpress --link myweb_com_mysql:mysql -p 127.0.0.1:48010:80 -v /opt/docker-volumes/myweb_com_wordpress:/var/www/html -e VIRTUAL_HOST="myweb.com,www.myweb.com" --restart unless-stopped -d wordpress

和 NGINX 反向代理:

docker run -d -p 80:80 --name nginx-proxy  -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy

这有什么问题?

问候

【问题讨论】:

    标签: mysql wordpress docker jwilder-nginx-proxy


    【解决方案1】:

    Jason Wilder 在他的README.md 中写道:

    用法

    运行它:

    $ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

    然后使用 env var VIRTUAL_HOST=subdomain.youdomain.com 启动您想要代理的任何容器

    $ docker run -e VIRTUAL_HOST=foo.bar.com ...

    我看到您将命令以相反的顺序排列,最后从nginx-proxy 开始。因此它不起作用。

    一个小小的旁注:我非常尊重 Jason 所做的社区工作。但在某些时候,我自己停止使用他的nginx-proxy,而只是开始使用简单的nginx 图像,在我的 DevOps 过程中动态添加配置。原因是mapping /var/run/docker.sock to inside of a container is a huge security risk。另一个原因是 nginx-proxy 当时不是很稳定,它没有将特定的东西转发到我的容器(比如 Jira 的一些标头)。不确定它现在是如何工作的,我的 DevOps 使用我自己的解决方案足够稳定,而且我永远不会将我的生产/测试/暂存环境暴露在上述安全风险中。

    无论如何。我生成像myweb.conf 这样的文件,其中包括:

    server {
      server_name myweb.com;
    
      location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://myweb:80;
      }
    }
    

    注意proxy_pass http://myweb:80; -- 如果容器在同一个网络上,nginx 在它的/etc/hosts 中有其他容器。但我通常会从正在运行的容器中获取 IP 来生成 conf 文件。安全总比后悔好。

    然后我启动一个nginx 容器并在其中添加文件。通常我用docker-compose

    version: '3.4'
    
    services:
      service-nginx:
        image: nginx:latest
        container_name: service-nginx
        restart: always
        volumes:
          - ${nginx_basepath}/nginx.conf:/etc/nginx/nginx.conf
          - ${nginx_basepath}/conf.d/:/etc/nginx/conf.d/
        ports:
          - "80:80"
    

    我将myweb.conf 保存到${nginx_basepath}/conf.d/,它会自动出现在 nginx 配置中,所以 nginx 知道它。之后,nginx 只需要使用docker exec -i service-nginx nginx -s reload 重新加载。

    祝你好运!

    【讨论】:

      【解决方案2】:

      你好,据我了解 --link 已弃用,建议创建自己的网络

      https://docs.docker.com/network/links/#connect-using-network-port-mapping

      希望对你有帮助

      enter link description here

      【讨论】:

      • 我不明白。可以给出上面给出的一些代码
      猜你喜欢
      • 2021-08-23
      • 2022-01-20
      • 2021-05-04
      • 2018-03-20
      • 2020-09-10
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      相关资源
      最近更新 更多