2016-04-29 109 views
0

我有一個通過bash供應與vagrant建立的虛擬機。無法從虛擬機訪問碼頭容器中的postgresql

我嘗試安裝一組應用程序和工具,在啓動時會將虛擬機啓動,並且其中一些需要PostgreSQL數據庫。我剝了下來提供階段只包括必要的部分:

install.sh:

function installPostgresql() { 
    docker pull postgres:9.4 
    docker run --name dbcontainer -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD -e POSTGRES_DB=dbname -e POSTGTES_HOST=localhost -d postgres 
} 

... 
installPostgresql 

它使用PostgreSQL的創建默認廣泛使用的碼頭工人的形象。我從中央存儲庫中提取它之後啓動它。

出於某種原因,我無法訪問正在運行的Postgres的服務我的虛擬機裏面,但我CAN連接,如果我上運行的泊塢窗執行/斌/ bash和使用虛擬機裏面的泊塢窗內PSQL。

內部VM:

[email protected]:~$ psql -h localhost -p 5432 -U postgres -W 
Password for user postgres: 
psql: could not connect to server: Connection refused 
    Is the server running on host "localhost" (::1) and accepting 
    TCP/IP connections on port 5432? 
could not connect to server: Connection refused 
    Is the server running on host "localhost" (127.0.0.1) and accepting 
    TCP/IP connections on port 5432? 

裏面的虛擬機內泊塢窗:

[email protected]:/# psql -h localhost -p 5432 -U postgres -W 
Password for user postgres: 
psql (9.5.2) 
Type "help" for help. 

postgres=# 

的pg_hba.conf:

local all    all          trust 
host all    all    127.0.0.1/32   trust 
host all    all    ::1/128     trust 
host all    all    0.0.0.0/0    md5 

爲什麼它是在虛擬機內部的docker中工作,但不是從VM中「只」運行?

回答

2

聽起來好像這是一個端口曝光問題。默認情況下,Docker容器不會將任何端口發佈到主機(在本例中爲您的VM)。但是,如果鏈接容器,那些容器可以與暴露的端口交互(例如在相關的Dockerfile中描述)。

嘗試添加-p選項將docker run命令,發佈PostgreSQL的端口連接到主機:

docker run --name dbcontainer -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD -e POSTGRES_DB=dbname -e POSTGTES_HOST=localhost -d -p 5432:5432 postgres

,可以找到關於這個in the documentation更多信息。

相關問題