2016-04-29 17 views
0

vagrantからbashプロビジョニングを使用してVMをセットアップしました。VMからdockerコンテナ内のpostgresqlにアクセスできない

起動時にアプリケーションとツールのバンドルをインストールしようとしましたが、そのうちのいくつかにはPostgreSQLデータベースが必要です。これは、PostgreSQLの作成デフォルト広く使われているドッキングウィンドウの画像を使用しています

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 

install.sh:私は必要な部分だけを含めるにプロビジョニングフェーズをストリップダウン。私は中央リポジトリから引き出した後に開始します。

何らかの理由で、私のVM内の実行中のpostgresサービスにアクセスできませんが、実行中のドッカーで/ bin/bashを実行し、VM内のドッカー内でpsqlを使用すると、CAN接続します。

インサイドVM: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 

なぜVM内のドッカーの内部では動作しますが、VMからの「のみ」ではありませんか?

答えて

2

あたかもポートエクスポートの問題であるかのように聞こえます。デフォルトでは、Dockerコンテナはホスト(この場合はVM)にポートを公開しません。ただし、コンテナをリンクすると、それらのコンテナは公開されているポートと対話できます(たとえば、関連資料Dockerfileを参照)。

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に関する詳細な情報を見つけることができます:あなたのホストにPostgreSQLのポートを公開するあなたのdocker runコマンドに-pオプションを追加すること

してみてください。

関連する問題