首页 > 解决方案 > 在 docker 容器中使用 pgadmin 和 nginx

问题描述

我觉得配置环境有问题,包括 postgres、pgadmin 和 nginx。所有这些服务都在 docker 容器中,这是我的 docker-compose 文件:

version: '3'

services:
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres

  pgadmin:
    links:
      - postgres:postgres
    image: dpage/pgadmin4:3.0
    environment:
      PGADMIN_DEFAULT_EMAIL: 'postgres@pg.com'
      PGADMIN_DEFAULT_PASSWORD: 'postgres'
    ports:
      - "5050:80"
    restart: unless-stopped

  nginx:
    links:
      - pgadmin:pgadmin
    image: "nginx:1.13.12"
    ports:
      - "80:80"
    volumes:
      - ./nginxServers/server:/etc/nginx/conf.d/default.conf

这是我的nginx.conf,放置在./nginxServers/server

server {
    listen       80;
    server_name  _;

    location  /pgadmin/ {                                                                    
            proxy_pass http://pgadmin/;
    }
}

如您所见,这是一个非常简单的设置,允许我通过http://localhost/pgadmin 使用 pgadmin

不幸的是,这不起作用。我可以通过http://127.0.0.1:5050看到 pgadmin 网络界面,但是当我导航到http://127.0.0.1/pgadmin时,所有样式和脚本都没有加载。

我还尝试了 nginx 配置中的另一个位置:

location  /pgadmin {                                                                    
            proxy_pass http://pgadmin;
}

但这也无济于事。

因此,我坚持正确配置 nginx 作为 pgadmin 的反向代理。

PS 正如我用谷歌搜索的那样,这个问题可能与提供 django 静态内容有关,但由于我不熟悉 django,我无法找到任何解决方法。

对于这个奇怪问题的任何帮助,我将不胜感激。

标签: djangodockernginxreverse-proxypgadmin

解决方案


可能你已经解决了。但问题是 nginx 解析主机名的方式。出于性能原因,它只执行一次。要强制 nginx 动态搜索 ip,只需在 nginx 配置中添加 Docker 解析器即可

http {
  resolver 127.0.0.11 ipv6=off;
}

见底部:docker dns server


推荐阅读