自分のマシンで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_dump
とrake db:test:clone
、rake 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'
ありがとうございました。これは原理的にはうまくいくように見えます。 (しかし、Dockerのドキュメントもそうでした)しかし、私は最終的にDockerなしでElasticBeanstalkにデプロイしました。 –