wordpress docker镜像和nginx反向代理

wordpress docker镜像和nginx反向代理,docker,nginx,docker-compose,Docker,Nginx,Docker Compose,我正在尝试使用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 r

我正在尝试使用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;

    }
}
但它不起作用,它总是试图从一个移动到另一个


我该怎么办?

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

  • 默认情况下,
    nginx
    wordpress
    Docker图像都在端口
    80
    上侦听。因此,您应该将
    wordpress
    映射到另一个。例如
    8080

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

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

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

这就是我建议的:

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;

    }
}

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

wordpress和nginx是否都监听:80端口还是仅仅是nginx?您能解释一下什么不起作用吗?日志怎么说?谢谢回复!当我访问时,我得到了=>502个坏网关感谢您的回复!使用此配置,当我访问
http://localhost
,我得到了=>502个坏网关好的,我在回答中更新了配置以修复您的问题