Использование pgadmin с nginx в докер-контейнерах - PullRequest
0 голосов
/ 26 апреля 2018

Я столкнулся с проблемами при настройке среды, содержащей 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/;
    }
}

Как видите, это очень простая настройка, позволяющая мне использовать pgadmin через http://localhost/pgadmin.

К сожалению, это не работает. Я вижу веб-интерфейс pgadmin через http://127.0.0.1:5050,, но при переходе к http://127.0.0.1/pgadmin, все стили и сценарии не загружаются.

Я также пробовал другое расположение в конфигурации nginx:

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

Но это тоже не помогло.

Таким образом, я застрял с правильной конфигурацией nginx в качестве обратного прокси для pgadmin.

P.S. Как я уже догадался, эта проблема может быть связана с обслуживанием статического контента Django, но, поскольку я не знаком с Django, я не могу найти обходной путь.

Буду благодарен за любую помощь в решении этой странной проблемы.

1 Ответ

0 голосов
/ 03 мая 2019

Возможно, вы уже решили это. Но проблема в том, как nginx разрешает имя хоста. Это делается только один раз по соображениям производительности. Чтобы заставить nginx динамически искать ip, просто добавьте распознаватель Docker в конфигурации nginx

http {
  resolver 127.0.0.11 ipv6=off;
}

см. Здесь внизу: Docker DNS-сервер

...