【问题标题】:wordpress docker image and nginx reverse proxywordpress docker 镜像和 nginx 反向代理
【发布时间】:2020-04-19 21:07:17
【问题描述】:

我正在尝试使用 docker-compose 来创建动态和快速的开发环境,并且我想使用 nginx 来路由所有服务。这是我的配置:

docker-compose.yml

version: '3.1'

services:
  nginx:
    image: nginx
    ports:
        - 80:80
    volumes: 
        - ./nginx:/etc/nginx/conf.d
  wordpress:
    image: wordpress
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - ./wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - ./db:/var/lib/mysql

nginx conf.d

server {
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://wordpress:80/;
        proxy_set_header      X-Real-IP $remote_addr;
        proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header      Host $host;

    }
}

但它不起作用,它总是试图从http://localhost移动到http://localhost:8080

我该怎么办?

【问题讨论】:

  • wordpress 和 nginx 都监听 :80 端口还是只是 nginx?
  • 你能解释一下什么不起作用吗?日志是怎么说的?
  • 感谢您的回复!当我访问localhost 时,我得到=> 502 Bad Gateway

标签: docker nginx docker-compose


【解决方案1】:

以下是示例代码中要解决的主要问题:

  • 默认情况下,nginxwordpress Docker 镜像都侦听端口 80。所以你应该将wordpress 映射到另一个。例如8080

  • 除非您为它们设置网络,否则所有图像将无法互相看到。

  • 更新nginx 配置以删除wordpress 的端口。在同一个网络中,他们只能使用主机名(所以他们的图像名称)看到对方

  • 必须更改声明 wordpressmysql 图像使用的卷的方式

所以这是我建议的:

docker-compose

version: '3.1'

services:
  nginx:
    image: nginx
    ports:
        - 80:80
    volumes: 
        - ./nginx:/etc/nginx/conf.d
    networks:
      - backend

  wordpress:
    image: wordpress
    ports:
        - 8080:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html
    networks:
      - backend

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql
    networks:
      - backend

volumes:
  wordpress:
  db:

networks:
  backend:
    driver: bridge

nginx.conf

server {
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://wordpress/;
        proxy_set_header      X-Real-IP $remote_addr;
        proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header      Host $host;

    }
}

您可以在the documentation 中查看有关 Docker Compose 中网络的更多详细信息。

【讨论】:

  • 感谢您的回复!使用此配置,当我访问http://localhost 时,我得到 => 502 Bad Gateway
  • 好的,我更新了答案中的配置以解决您的问题
猜你喜欢
  • 2019-08-31
  • 2021-11-24
  • 2016-07-22
  • 2020-11-28
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2018-10-10
相关资源
最近更新 更多