在 docker 容器中将 pgadmin 与 nginx 结合使用

Ale*_*kiy 5 django reverse-proxy nginx pgadmin docker

我遇到了配置环境的问题,包括 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
Run Code Online (Sandbox Code Playgroud)

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

server {
    listen       80;
    server_name  _;

    location  /pgadmin/ {                                                                    
            proxy_pass http://pgadmin/;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

location  /pgadmin {                                                                    
            proxy_pass http://pgadmin;
}
Run Code Online (Sandbox Code Playgroud)

但这也没有帮助。

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

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

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

est*_*ani 2

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

http {
  resolver 127.0.0.11 ipv6=off;
}
Run Code Online (Sandbox Code Playgroud)

请参阅底部:docker dns 服务器