У меня есть Postgresql на сервере в контейнере докеров. Как я могу подключиться к нему со стороны, то есть с моего локального компьютера? Какую настройку я должен применять, чтобы позволить это?
Подключение к Postgresql в контейнере докеров со стороны
Ответ 1
Вы можете запустить Postgres следующим образом (отобразить порт):
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Итак, теперь вы сопоставили порт 5432 вашего контейнера с портом 5432 вашего сервера. -p <host_port>:<container_port>
что теперь ваши postgres доступны с вашего public-server-ip:5432
Чтобы проверить: Запустите базу данных postgres (команда выше)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05b3a3471f6f postgres "/docker-entrypoint.s" 1 seconds ago Up 1 seconds 0.0.0.0:5432->5432/tcp some-postgres
Зайдите внутрь своего контейнера и создайте базу данных:
docker exec -it 05b3a3471f6f bash
[email protected]:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q
Перейдите на ваш локальный хост (где у вас есть какой-либо инструмент или клиент PSQL).
psql -h public-ip-server -p 5432 -U postgres
(пароль мой секретный пароль)
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
Итак, вы обращаетесь к базе данных (которая работает в Docker на сервере) с вашего локального хоста.
В этом посте он подробно изложен.
Ответ 2
Мне удалось запустить его на Linux
-
1 Сначала запустите Docker Postgres, убедитесь, что порт опубликован, я использую Alpine, потому что он легкий.
sudo docker run --rm -p -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
-
2 использовать другой терминал, получить доступ к базе данных с хоста, используя postgres uri
psql postgresql://postgres:[email protected]:5432/postgres
для пользователей Mac замените psql на pgcli
Ответ 3
Вы также можете получить доступ с помощью команды docker exec:
$ docker exec -it postgres-container bash
# su postgres
$ psql
Или
$ docker exec -it postgres-container psql -U postgres
Ответ 4
Я уже запустил 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
Ответ 5
Для подключения с локального хоста вам необходимо добавить "--net host":
docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Вы можете получить доступ к серверу напрямую, не используя exec с вашего локального хоста, используя:
psql -h localhost -p 5432 -U postgres
Ответ 6
Я использую django с postgres в контейнерах Docker. в файле docker-compose добавьте следующее:
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
**ports:
- "6543:5432"**
который добавит доступный порт на вашей локальной машине. для себя я подключил к нему DBeaver. это предотвратит конфликты портов между запросом приложения и запросом локального компьютера. сначала я получил сообщение о том, что используется порт 5432 (который используется приложением django), поэтому я не смог получить доступ через pgAdmin или DBeaver.
Ответ 7
Я попытался подключиться с локального хоста (mac) к контейнеру postgres. Я изменил порт в файле docker-compose с 5432 на 3306 и запустил контейнер. Понятия не имею, почему я это сделал: |
Затем я попытался подключиться к postgres через PSequel и adminer, и установить соединение не удалось.
После переключения на порт 5432 все работает нормально.
db:
image: postgres
ports:
- 5432:5432
restart: always
volumes:
- "db_sql:/var/lib/mysql"
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres_db
Это был мой опыт, которым я хотел поделиться. Возможно, кто-то может использовать это.
Ответ 8
сначала откройте образ докера для postgres
docker exec -it <container_name>
тогда вы получите root - [email protected]:/#
ему нужно соединение с базой данных
psql postgresql://<username>:<databasepassword>@postgres:5432/<database>
Ответ 9
Здесь есть хорошие ответы, но если вы хотите иметь некоторый интерфейс для управления базой данных postgres, вы можете установить pgAdmin на локальном компьютере и подключиться к удаленному компьютеру, используя его IP-адрес и открытый порт postgres (по умолчанию 5432).
Ответ 10
Почему-то порт 5432 кажется защищенным. Я изменил конфигурацию своего порта с 5432:5432
на 5416:5432
и следующая команда работала для подключения к вашей базе данных postgres из-за пределов его контейнера докера:
psql -h localhost -p 5416 -U <my-user> -d <my-database>
Ответ 11
Я предполагаю, что вы хотите, чтобы иметь возможность просматривать данные, присутствующие в вашем контейнере каждый раз, когда вы подключаетесь к нему извне. Для этого вам необходимо сохранить данные на изображении 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. Войдите в контейнер_имя в интерактивном режиме
.
(Примечание: такие команды, как 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
, и введите в поля подключения ниже:
Host: localhost
Database: test
User: postgres
Password: password
Шаг 8: введите запрос select * from test_table
в редакторе запросов, и вы должны увидеть вывод 123
Ответ 12
В случае, если это серверное приложение django, вы можете сделать что-то вроде этого.
docker exec -it container_id python manage.py dbshell
Ответ 13
docker ps -a
, чтобы получить идентификаторы контейнеров
Докер Exec -it PSQL -U -W