Я пытаюсь запустить PostgreSQL и pgAdmin в контейнерах Docker. Идея состоит в том, что база данных PostgreSQL должна быть доступна для любых приложений, которые я запускаю на хост-машине, а также для pgAdmin.
Я использую эту команду для запуска PostgreSQL:
docker run -d -e POSTGRES_USER=username -e POSTGRES_PASSWORD=password --name postgres -p 5432:5432 postgres
И запустить pgAdmin :
docker run -d -p 1111:1111 --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4
Если я зайду на localhost:1111
, я могу подключиться к pgAdmin и войти в систему. Однако, когда я пытаюсь подключиться к моему локальному экземпляру PostgreSQL, он не получает ответа.
Поэтому я попытался запустить pgAdmin с доступом к главному Интернету, используя --net=host
вместо -p 1111:1111
:
docker run -d --net=host --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4
Теперь, когда я пытаюсь перейти на localhost:1111
для подключения к pgAdmin, я не получаю ответа в своем браузере.
Docker Compose является возможным решением, так как я мог бы связать два контейнера вместе, чтобы они могли обращаться друг к другу, не беспокоясь о портах, но мне также нужен pgAdmin, чтобы иметь возможность доступа к экземплярам PostgreSQL на других машинах, а также мой местный.
Я чувствую, что --net=host
сломан в Docker. Здесь целая нить здесь с большим количеством путаницы.
Моя настройка:
Host: Windows 10
Docker: Docker Desktop Community v2.0.0.3 (31259)
Обновление
Я сейчас попытался использовать --link postgres
в контейнере pgAdmin, и это позволяет мне подключаться к моему локальному экземпляру PostgreSQL, но не к нелокальным, полная команда:
docker run -d -p 1111:1111 --link postgres --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4