Когда я использую Docker на своей машине, я хочу получить доступ к Postgres моей системы. Это до развертывания моих изображений в AWS, где я хочу использовать RDS.Как получить доступ к моей локальной системе Postgres from Docker
Я выполнил шаги на Docker's Quickstart: Docker Compose and Rails page, за исключением того, что, поскольку я работал с существующим приложением, я не создал начальный минимальный Gemfile, который просто загружает Rails.
Вне контейнера Докер, установлен и работает правильно 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
файла Docker в следующем виде:
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, на основе инструкций Docker с несколькими дополнительными двоичными файлами, необходимых моим существующим приложением, является:
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.
Update
Когда я иду в, как это ...
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
или аналогичный ,
Update 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, что имеет решающее значение здесь.
Помогло бы мне, если бы я понизил Postgres Mac до версии, полученной apt-get
? Обновление версии установленной на 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'
Спасибо. Это выглядит в принципе так, как должно работать. (Но тогда и докеры дописывали.) Но в конце концов я закончил развертывание на ElasticBeanstalk без Docker. –