2016-06-08 8 views
43

У меня есть Postgresql на сервере в контейнере докера. Как я могу подключиться к нему со стороны, то есть с моего локального компьютера? Какую настройку я должен применять, чтобы это разрешить?Подключение к Postgresql в контейнере для докеров снаружи

+0

Какую команду вы использовали для начала postresql? вы можете открыть порт и нарисовать его – lvthillo

+1

@ lorenzvth7, как? – Sojo

ответ

100

Вы можете запустить Postgres этот путь (карта порта):

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres 

Итак, теперь вы сопоставили порт 5432 вашего контейнера в порту 5432 вашего сервера. -p <host_port>:<container_port> .so теперь ваши 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 

Go внутри контейнера и создать базу данных:

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 

(пароль 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 

Таким образом, вы получаете доступ к базе данных (который работает в грузчиком на сервере) с вашего локального хоста.

+7

Я пропустил «-h localhost» здесь. Спасибо! –

+0

Настройка порта работала для меня –

+1

это не работает для localhost – Tjorriemorrie

8

я уже работаю 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 
1

Вы можете также доступ также через команду docker exec.

$ docker exec -it postgres-container bash 

# su postgres 

$ psql