【问题标题】:docker container can not connect to local postgres [duplicate]docker容器无法连接到本地postgres [重复]
【发布时间】:2020-02-26 22:55:53
【问题描述】:

无法从 docker 容器连接到 Postgres。 我不希望用户 docker-compose 并创建一个 Postgres 容器,已经让 Postgres 应用程序运行。我认为容器 postgres 和更好地使用系统是一个坏主意。

OSX、Postgres10、Flask

我已经做了

postgresql.conf

listen_addresses = '*'  
port = 5432

pg_hba.conf

host    all             all             0.0.0.0/0               trust

我对任何结果都使用了信任,但没有效果。

Dockerfile

FROM python:3.8-alpine
RUN apk update \
    && apk add --virtual build-deps gcc musl-dev \
    && apk add python3-dev \
    && apk add postgresql-dev \
    && apk add jpeg-dev zlib-dev libjpeg \
    && pip install --upgrade pip
ENV PYTHONUNBUFFERED 1 \
    && FLASK_APP app.py
#EXPOSE 5000 5432
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
CMD ["./bin/run.sh"]

./bin/run.sh

#!/bin/sh
#python run.py
source venv/bin/activate
set -e
flask db upgrade
exec gunicorn -b --workers 4 --access-logfile --error-logfile run:app :5000

我尝试使用的“docker run”命令:

docker run --rm -e SQLALCHEMY_DATABASE_URI=postgresql://postgres:postgres@0.0.0.0:5432/my_db --net=host -p 5000:5000 my_container:v0.1

命令导致错误

...
psycopg2.OperationalError: could not connect to server: Connection refused
        Is the server running on host "0.0.0.0" and accepting
        TCP/IP connections on port 5432?

命令将我连接到 Postgres

psql -U postgres -h 0.0.0.0

【问题讨论】:

  • 从容器连接到 0.0.0.0 将连接到 localhost,而从容器内的连接将解析到容器本身,而不是运行在宿主容器上。
  • 你试过127.0.0.1吗?
  • @BurakSerdar 是的,我尝试连接到 docker 之外的东西。
  • @BlackFrog 我做了,localhost, 127.0.0.1, 0.0.0.0 没有效果,我什至尝试了 172.17.0.1/16 /24... 在 conf 和命令中设置
  • 在 OS X 主机上,您可以使用特殊主机名 host.docker.internal 访问在同一物理主机上运行的非 Docker 数据库。

标签: postgresql docker flask docker-run


【解决方案1】:

尝试连接到主机“0.0.0.0”在技术上是错误的。 (地址0.0.0.0用于其他用途,不能连接...)

您是否尝试使用 postgres 容器 IP 地址而不是“0.0.0.0”进行连接?

您可以通过以下命令获取postgres容器ip地址:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' name_of_postgres_container

【讨论】:

  • 我不使用 Postgres 容器。我想连接到系统 Postgres。
  • 是的,我猜系统 Postgres 在 localhost 上运行,我可以通过命令 psql -U postgres -h 0.0.0.0 连接到 Postgres
  • 对不起,我没有读到你没有为 postgres 做 docker。无论如何,所以我的意思是使用 postgres 系统 ip 地址而不是连接到 0.0.0.0 ip 地址。如果它不起作用,请提供有关您的设置的更多信息,以便我们对您有所帮助。
  • 您是在应用容器中运行 psql 命令还是在运行 postgres 的同一级别?
  • @matiferringo 是的,创建另一个我可以使用 docker-compose 的容器要容易得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 2019-08-11
  • 1970-01-01
  • 2020-04-27
  • 2020-11-20
  • 1970-01-01
相关资源
最近更新 更多