Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从容器内的烧瓶应用程序连接到postgres容器_Postgresql_Docker_Flask Sqlalchemy - Fatal编程技术网

Postgresql 从容器内的烧瓶应用程序连接到postgres容器

Postgresql 从容器内的烧瓶应用程序连接到postgres容器,postgresql,docker,flask-sqlalchemy,Postgresql,Docker,Flask Sqlalchemy,我有我的烧瓶appapp.py: from flask import Flask from flask_sqlalchemy import SQLAlchemy APP = Flask(__name__) DB = SQLAlchemy() if __name__ == '__main__': APP.config.from_mapping( SQLALCHEMY_DATABASE_URI='postgres://postgres:password@0.0.0.0:5

我有我的烧瓶app
app.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

APP = Flask(__name__)
DB = SQLAlchemy()

if __name__ == '__main__':
    APP.config.from_mapping(
        SQLALCHEMY_DATABASE_URI='postgres://postgres:password@0.0.0.0:5432',
        SQLALCHEMY_TRACK_MODIFICATIONS=False
    )
    DB.init_app(APP)
    DB.create_all(app=APP)
    APP.run(use_reloader=False, host='0.0.0.0', port='5000')
我有一个Dockerfile:

FROM python:3.6-alpine

RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev

WORKDIR /root

COPY app.py .

RUN pip3 install Flask==1.0.2
RUN pip3 install psycopg2-binary==2.7.6.1
RUN pip3 install Flask-SQLAlchemy==2.3.2

CMD ["python3", "app.py"]
我运行:

docker build . --tag flaskapp:1
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=password --name database postgres
docker run --rm -p 5000:5000 flaskapp:1

然后我得到一个例外,指出:

sqlalchemy.exc.OperationalError: (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?

如何修复此问题?

您已将
0.0.0.0
指定为要连接的IP地址,这没有意义
0.0.0.0
是“任意地址”。您可能看到postgres正在0.0.0.0上收听的消息,这就是您从中获得该消息的原因。在侦听0.0.0.0的服务器上下文中,这意味着它正在侦听所有ipv4接口。有关特殊0.0.0.0地址及其含义的更多信息,请参阅

如果要连接到postgres服务,则需要使用其运行位置的有效ip地址或dns名称

在Docker中,如果有多个命名容器连接到同一个用户定义的网络,则可以使用Docker附带的内置服务发现机制

下面是一组经过修改的命令,可以利用这些命令运行:

docker network create mynet
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=password --net mynet --name database postgres
docker run --rm -p 5000:5000 --net mynet flaskapp:1

确保更改代码以连接到
postgres://postgres:password@数据库:5432
而不是
postgres://postgres:password@0.0.0.0:5432

您已指定
0.0.0
作为要连接的IP地址,这没有意义
0.0.0.0
是“任意地址”。您可能看到postgres正在0.0.0.0上收听的消息,这就是您从中获得该消息的原因。在侦听0.0.0.0的服务器上下文中,这意味着它正在侦听所有ipv4接口。有关特殊0.0.0.0地址及其含义的更多信息,请参阅

如果要连接到postgres服务,则需要使用其运行位置的有效ip地址或dns名称

在Docker中,如果有多个命名容器连接到同一个用户定义的网络,则可以使用Docker附带的内置服务发现机制

下面是一组经过修改的命令,可以利用这些命令运行:

docker network create mynet
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=password --net mynet --name database postgres
docker run --rm -p 5000:5000 --net mynet flaskapp:1

确保更改代码以连接到
postgres://postgres:password@数据库:5432
而不是
postgres://postgres:password@0.0.0.0:5432

好的,所以我实际上发现
--network=host
解决了这个问题。它可能会导致其他问题,但总比不为momentok工作要好,所以我实际上发现
--network=host
解决了这个问题。它可能会导致其他问题,但总比暂时不工作好