2016-09-06 6 views
2

自分のマシンでDockerを使用すると、システムのPostgresにアクセスしたいと思っています。これは、RDSを使用したいAWSにイメージを展開する前です。私のローカルシステムPostgresにDockerからアクセスする方法

Docker's Quickstart: Docker Compose and Rails pageの手順に従っていますが、既存のアプリケーションで作業していたため、Railsをロードする初期の最小Gemfileは作成しませんでした。

ドッカーコンテナの外では、Postgresはインストールされ、正しく動作している:

$ which postgres 
/Applications/Postgres.app/Contents/Versions/latest/bin/postgres 
$ which pg_restore 
/Applications/Postgres.app/Contents/Versions/latest/bin/pg_restore 
$ which pg_dump 
/Applications/Postgres.app/Contents/Versions/latest/bin/pg_dump 

アプリは何年もドッカーせずに正常に動作しています。ドッカーコンテナの外でアプリをテストするには、もう一度、私は次のようにドッカーの推奨docker-compose.ymlファイルの1行をコメントアウト持っている:コンテナの外に、私はそれを行うとき

development: &default 
    adapter: postgresql 
    encoding: unicode 
    database: postgres 
    pool: 5 
    username: postgres 
    password: 
    # host: db 

test: 
    <<: *default 
    database: myapp_test 

、私はrake db:test:clone(たとえば)を実行することができます心配ありません:痛みのすべての種類で

しかし、私はその行のコメントを解除し、コンテナ内のTTYに接続するとき、私は:

/myapp# rake db:test:clone           
pg_dump -s -x -O -f /myapp/db/structure.sql postgres 
Please check the output above for any errors and make sure that `pg_dump` is installed in your PATH and has proper permissions. 
/myapp# which postgres 
/myapp# which pg_restore 
/myapp# which pg_dump 
/myapp# 

私は何ができますか?

Dockerfileは、私の既存のアプリケーションで必要とされるいくつかの余分なバイナリとドッカーの指示に基づき、次のとおりです。

FROM ruby:2.3.1-slim 

RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections 
RUN apt-get update 
RUN apt-get install -qq -y --no-install-recommends --fix-missing apt-utils 
RUN apt-get install -qq -y --no-install-recommends --fix-missing build-essential 
RUN apt-get install -qq -y --no-install-recommends --fix-missing git 
RUN apt-get install -qq -y --no-install-recommends --fix-missing xvfb 
RUN apt-get install -qq -y --no-install-recommends --fix-missing qt5-default 
RUN apt-get install -qq -y --no-install-recommends --fix-missing libqt5webkit5-dev 
RUN apt-get install -qq -y --no-install-recommends --fix-missing gstreamer1.0-plugins-base 
RUN apt-get install -qq -y --no-install-recommends --fix-missing gstreamer1.0-tools 
RUN apt-get install -qq -y --no-install-recommends --fix-missing gstreamer1.0-x 
RUN apt-get install -qq -y --no-install-recommends --fix-missing nodejs 
RUN apt-get install -qq -y --no-install-recommends --fix-missing libpq-dev 

RUN mkdir /myapp 
WORKDIR /myapp 

ADD Gemfile /myapp/Gemfile 
ADD Gemfile.lock /myapp/Gemfile.lock 
RUN bundle install 

ADD . /myapp 
関連

:私は、コンテナの外ではなく、その中にredis-cliを見ることができます。これはPostgresの問題を一度解決すれば問題になります。

更新

私はこのようで行く...

docker-compose run web rake db:create 
docker-compose run web rake db:test:clone 

...私がPostgresのにアクセスできるようだが、ないpg_dumprake db:test:clonerake db:test:loadまたは類似のために必要なその他のユーティリティ。

更新II

私はDockerfileに次を追加しました:今

RUN apt-get install -qq -y --no-install-recommends --fix-missing postgresql-client 

、代わりに私に "見つからない" というエラーを与える、それは言う:

pg_dump: server version: 9.5.4; pg_dump version: 9.4.9 
pg_dump: aborting because of server version mismatch 

これは、他の場所で説明されている問題ではありますが、ここで重要なのはDockerのコンテキストではありません。

私のMacのPostgresをapt-getで取得したバージョンにダウングレードするとどうなるでしょうか?

Step 15 : RUN apt-get install -qq -y --no-install-recommends --fix-missing postgresql-client-9.5 
---> Running in 614b88701710 
E: Unable to locate package postgresql-client-9.5 
E: Couldn't find any package by regex 'postgresql-client-9.5' 

答えて

2

これは、これはトリッキーである「ヤー、それは間違ってdoinの」されていません:apt-getによってインストールされたバージョンをアップグレードすると、オプションではないと思われます。あなたがリンクしているドッカーのイントロを走り回ってしまいました。

ここで私のアプリのためにしたものです。私はアプリの名前を付けた基本イメージからアプリを作りました。ベースイメージには、アプリの名前が付けられます。あなたの例を使用すると、それはmyapp_baseと呼ばれます。あなたのdocker-compose.ymlファイルはここには表示されませんので、いくつか前提をします。

web: image: your_company/myapp_base links: - db volumes: - .:/myapp # ports: # - "3002:3002" # env_file: # - .myapp.env

ポートとenv_file必要とされていないが、彼らは、後に便利になるかもしれません。 Myapp_baseはdepsを引き込む奇妙なワークフローで構築されますが、アプリがpostgresが必要と宣言されている場合は基本的にpostgres-clientにスローされます。シェフにはありますが、基本的にはmyapp runlist needs postgresqlです。私たちは実際にこれから遠ざかり、スクリプトやDockerfile自体に設定項目を入れようとしています。

だから基本的には、apt-get install postgres-clientをDockerfileに追加し、myapp_baseとタグ付けし、docker-compose.ymlファイルに使用します。 docker-compose run web rake dbのものを実行すると、psqlが見つかります。

+1

ありがとうございました。これは原理的にはうまくいくように見えます。 (しかし、Dockerのドキュメントもそうでした)しかし、私は最終的にDockerなしでElasticBeanstalkにデプロイしました。 –

関連する問題