0

我的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?

4

2 回答 2

0

如果在 MAC 操作系统上 -

默认情况下,Postgres 在 localhost 上工作,如果您没有对其进行任何更改,那么它必须是 localhost。

我们的案例是将 Postgres 与我们的 pact-broker 容器连接起来,这意味着容器将与我们的本地交互。

因此,不要将“localhost”定义为“docker.for.mac.localhost”,它应该可以工作。

  • 注意:如果您使用的是除 MAC 以外的差异操作系统,并且它们必须与此相同,您可以检查 Windows* 的“docker.for.win.localhost”之类的内容
于 2020-01-09T09:47:48.977 回答
0

有两种方法可以PostgreSQL从上述容器访问主机:

1.仅 on <HOST_IP>:<PostgreSQL_PORT>,如果 docker 容器在桥接网络中启动:

docker run -d <image_name>

PostgreSQL应该绑定到<HOST_IP>or 0.0.0.0(其中包括<HOST_IP>)。

2. On <HOST_IP>:<PostgreSQL_PORT>(如果PostgreSQL绑定到<HOST_IP>or 0.0.0.0)并且localhost:<PostgreSQL_PORT>,如果 docker 容器在宿主网络中启动:

docker run --network host -d <image_name>

默认情况下PostgreSQL绑定到localhost,所以第二种方式是一个通用的解决方案。

于 2018-04-01T13:04:17.887 回答