【问题标题】:docker-compose Nextcloud Instance behind reverse proxy Bad gateway 502docker-compose Nextcloud Instance behind reverse proxy Bad gateway 502
【发布时间】:2022-12-14 03:52:18
【问题描述】:

我想从使用 docker run-command 切换到 docker-compose 文件,我的 nextcloud 实例在反向代理 (jwilder/nginx-proxy) 后面运行。

这是我以前使用的运行命令:

sudo docker run -d -p 8080:80 --expose 80 --expose 443 -e VIRTUAL_HOST=nextcloud.example.com -v nextcloud:/var/www/html --restart=always --name=nextcloud nextcloud:24.0.8

我后来在容器中安装了 mariaDB,这样我就不必为网络而烦恼了。此外,我仅在内部网络中使用端口 8080 进行快速上传和下载。

这工作得很好,但现在我想用docker-compose创建一个类似的环境:

version: '3.8'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb:10.5
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=my-super-strong-password
      - MYSQL_PASSWORD=my-other-super-strong-password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud:24.0.8
    restart: always
    ports:
      - 8080:80
    expose:
      - 80
      - 443
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=my-other-super-strong-password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
      - PHP_MEMORY_LIMIT=1G
      - PHP_UPLOAD_LIMIT=128M
      - VIRTUAL_HOST=nextcloud.example.com

容器成功启动,我可以在我的内部网络中使用 nextcloud。但是我无法从我的域中联系到他们。相反,我得到一个502 Bad request。 VIRTUAL_HOST 重定向似乎有效,因为我得到的是 503 Service Temporarily Unavailable。 我认为公开端口 80 和 443 不起作用。

我尝试添加代理网络:

networks:
  proxy:
    driver: bridge
    external: true

并添加

networks:
      - default

到数据库服务和

networks:
      - default
      - proxy

到应用程序服务。

那并没有解决问题。你们中有人知道我接下来可以尝试什么吗?

我尝试了不同的方式来公开端口并尝试创建不同的网络

【问题讨论】:

    标签: docker networking reverse-proxy nextcloud


    【解决方案1】:

    没关系发现问题。

    我不是简单地创建一个名为 proxy 的网络,而是必须通过 docker compose 创建一个新的 jwilder 反向代理服务并命名,例如 myreverseproxy。在我想公开的每项服务中,我需要将此代理命名为:

    networks:
      - default
      - myreverseproxy
    

    我还必须在网络服务区使用名称:

    networks:
      myreverseproxy:
        external: true
    

    【讨论】: