У меня есть Postgresql на сервере в контейнере докера. Как я могу подключиться к нему извне, то есть с моего локального компьютера? Какие настройки я должен применить, чтобы разрешить это?
233
У меня есть Postgresql на сервере в контейнере докера. Как я могу подключиться к нему извне, то есть с моего локального компьютера? Какие настройки я должен применить, чтобы разрешить это?
Ответы:
Вы можете запустить Postgres следующим образом (сопоставить порт):
Итак, теперь вы сопоставили порт 5432 вашего контейнера с портом 5432 вашего сервера.
-p <host_port>:<container_port>
.Так что теперь ваш postgres доступен из вашегоpublic-server-ip:5432
Для проверки: запустите базу данных postgres (команда выше)
Войдите в свой контейнер и создайте базу данных:
docker exec -it 05b3a3471f6f bash root@05b3a3471f6f:/# psql -U postgres postgres-# CREATE DATABASE mytest; postgres-# \q
Перейдите на свой локальный хост (где у вас есть какой-нибудь инструмент или клиент psql).
(пароль mysecretpassword)
postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- mytest | postgres | UTF8 | en_US.utf8 | en_US.utf8 | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
Итак, вы получаете доступ к базе данных (которая работает в докере на сервере) с вашего локального хоста.
В этом посте он expained подробно.
источник
ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1
docker run --net=host --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Мне удалось запустить его на Linux
запустите docker postgres - убедитесь, что порт опубликован, я использую alpine, потому что он легкий.
sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
используя другой терминал, получите доступ к базе данных с хоста, используя postgres uri
psql postgresql://postgres:1234@localhost:5432/postgres
для пользователей Mac замените psql на pgcli
источник
sudo
для запуска вашего контейнера.Вы также можете получить доступ с помощью команды docker exec:
$ docker exec -it postgres-container bash # su postgres $ psql
Или
источник
su postgres
делать?su postgres
означает: переключить пользователя на пользователя postgres.У меня уже был запущен postgres на хост-машине, и я не хотел разрешать подключения из сети, поэтому я запустил временный экземпляр postgres в контейнере и создал базу данных всего в двух строках:
# Run PostgreSQL docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres # Create database docker exec -it postgres-container createdb -U postgres my-db
источник
-e POSTGRES_DB=my-db
для создания my-db вместо postgresЯ использую django с postgres в контейнерах Docker. в файле docker-compose добавьте следующее:
который добавит доступный порт на вашем локальном компьютере. для себя подключил к нему DBeaver. это предотвратит конфликты портов между запросом вашего приложения и запросом локального компьютера. сначала я получил сообщение о том, что порт 5432 используется (это приложение django), поэтому я не мог получить доступ с помощью pgAdmin или DBeaver.
источник
Я предполагаю, что вы хотите иметь возможность просматривать данные, имеющиеся в вашем контейнере, каждый раз, когда вы подключаетесь к нему извне. Для этого вам нужно будет сохранить данные в образе postgres.
Если у вас нет постоянных данных, вам придется повторить все, что вы сделали в первый раз.
Шаги 3, 5, 6, 7 и 8 дают прямой ответ на ваш вопрос.
Вот подробный обзор всего процесса, который я выполнял в Windows 10 PowerShell (команды одинаковы в Linux и macOS):
Шаг 1. Запустите powershell в режиме без прав администратора
Шаг 2 : Загрузите образ докера postgres:
docker pull postgres:latest
Шаг 3. Запустите контейнер докеров в отсоединенном режиме и сохраните данные в образе postgres, создав том и привязывая его к месту назначения
( Примечание : по умолчанию используется порт по умолчанию 5432, но укажите его явно, чтобы предотвратить ошибки подключения от таких клиентов, как pgadmin, dbeaver и т. д.)
docker run --name postgres-test -e POSTGRES_PASSWORD=password -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres:latest
Шаг 4. Проверьте статус запущенных контейнеров.
docker ps -a
Шаг 5 : Войдите в container_name в интерактивном режиме
( Примечание : здесь могут быть выполнены такие команды, как ls, pwd и т. Д., Если вы проверили контейнеры linux во время установки)
docker exec -it postgres-test psql -U postgres
Шаг 6 : Создайте образец данных. На этом этапе вы можете играть с
psql
командами следующим образом:# CREATE DATABASE test; # \c test # CREATE TABLE test_table(something int); # INSERT INTO test_table VALUES (123); # SELECT * FROM test_table; # \q
Шаг 7 : Откройте клиентское приложение базы данных, например
pgadmin
или,dbeaver
и введите в поля подключения следующее:Шаг 8 : введите запрос
select * from test_table
в редакторе запросов, и вы должны увидеть результат.123
источник
Для подключения с локального хоста вам нужно добавить --net host:
docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Вы можете получить доступ к серверу напрямую, не используя exec с вашего локального хоста, используя:
источник
Я знаю, что это поздно, если вы использовали docker-compose, например @Martin
Это фрагменты, которые помогли мне подключиться к psql внутри контейнера.
docker-compose run db bash
root@de96f9358b70:/# psql -h db -U root -d postgres_db
Я не могу комментировать, потому что у меня нет 50 репутации. Надеюсь, это поможет.
источник
Я попытался подключиться с localhost (mac) к контейнеру postgres. Я изменил порт в файле docker-compose с 5432 на 3306 и запустил контейнер. Понятия не имею, зачем я это сделал: |
Затем я попытался подключиться к postgres через PSequel и adminer, но соединение установить не удалось.
После переключения на порт 5432 все работает нормально.
Это был мой опыт, которым я хотел поделиться. Возможно, кому-то это пригодится.
источник
/var/lib/mysql
:?Почему-то порт 5432 кажется защищенным. Я изменил конфигурацию порта с
5432:5432
на,5416:5432
и следующая команда работала для подключения к вашей базе данных postgres извне контейнера докеров :источник
postgres
службу на своем хост-компьютере, который уже привязан к localhost: 5432, что не позволяет вам ее использовать. Сопоставление другого порта хоста с портом по умолчанию 5432 внутри контейнера - хорошее решение; в качестве альтернативы вы можете остановить службу postgres на своем хосте, но, возможно, она используется для чего-то, что вам нужно.сначала откройте образ докера для postgres
тогда вы получите рут -
root@868594e88b53:/#
ему нужно подключение к базе данныхисточник
В случае, если это серверное приложение django, вы можете сделать что-то вроде этого.
источник
Здесь есть хорошие ответы, но если вам нужен какой-то интерфейс для управления базой данных postgres, вы можете установить pgAdmin на свой локальный компьютер и подключиться к удаленному компьютеру, используя его IP-адрес и открытый порт postgres (по умолчанию 5432).
источник
docker ps -a
чтобы получить идентификаторы контейнеров, затем docker exec -it psql -U -Wисточник