2016-06-08 110 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>。所以現在你的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 

(密碼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

@Tjorriemorrie你確定你的Postgres是在本地機器上運行,這並不爲本地主機 – 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