Как подключить Docker-контейнер Pact-Broker к локальной базе данных Postgresql?
Мой dockerfile выглядит следующим образом:
FROM phusion/passenger-ruby24:0.9.26
ENV APP_HOME=/home/app/pact_broker/
RUN rm -f /etc/service/nginx/down /etc/nginx/sites-enabled/default
COPY container /
RUN gem update --system
# USER app
COPY pact_broker/config.ru pact_broker/Gemfile pact_broker/Gemfile.lock $APP_HOME
# Update system gems for:
# https://www.ruby-lang.org/en/news/2017/08/29/multiple-vulnerabilities-in-rubygems/
RUN gem install bundler && \
cd $APP_HOME && bundle install --deployment --without='development test'
COPY pact_broker/ $APP_HOME/
RUN chown -R app:app $APP_HOME
EXPOSE 80
CMD ["/sbin/my_init"]
Как я могу заставить этот контейнер использовать локальную установку postgresql?
1 ответ
Если на MAC OS -
По умолчанию Postgres работает на localhost, и если вы не делали с ним никаких изменений, то это должен быть localhost.
В нашем случае подключение Postgres к нашему контейнеру pact-broker означает, что контейнер будет взаимодействовать с нашим локальным.
Поэтому вместо "localhost" определите свой хост как "docker.for.mac.localhost", он должен работать.
- Примечание: если вы используете другую ОС, отличную от MAC, и у них должно быть что-то подобное, вы можете проверить это, например "docker.for.win.localhost" для Windows*
Есть два способа доступа PostgreSQL
на хосте из вышеуказанного контейнера:
1. Только на <HOST_IP>:<PostgreSQL_PORT>
, если Docker-контейнер запущен в мостовой сети:
docker run -d <image_name>
PostgreSQL
должен быть связан с <HOST_IP>
или же 0.0.0.0
(который включает в себя <HOST_IP>
).
2. Вкл <HOST_IP>:<PostgreSQL_PORT>
(если PostgreSQL
связан с <HOST_IP>
или же 0.0.0.0
) а также localhost:<PostgreSQL_PORT>
, если Docker-контейнер запущен в сети хоста:
docker run --network host -d <image_name>
По умолчанию PostgreSQL
связан с localhost
Второй способ - универсальное решение.