【发布时间】: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