我的 Flask Container 和 Ganache Container 之间没有连接

Posted

技术标签:

【中文标题】我的 Flask Container 和 Ganache Container 之间没有连接【英文标题】:No connection between my Flask Container and the Ganache Container 【发布时间】:2019-10-23 16:56:16 【问题描述】:

我想将我的 Flask Docker 容器连接到 Ganache Docker 容器。 Ganache 容器可以正常工作。 我将 Flask 应用程序本地连接到 Ganache 容器,一切正常。但如果我使用我的 Flask 容器,应用程序将无法连接到 Ganache 容器。

我的 docker-compose 文件:

version: "3"
services:
    app:
        image: flask-api
        build:
             context: .
             dockerfile: Dockerfile-flask-api
        ports:
             - '5000:5000'
        volumes:
             - ./app:/app
        depends_on:
             - blockchain
    blockchain:
        image: trufflesuite/ganache-cli:latest
        ports:
             - '8545:8545'

我的 Flask 应用程序的 Dockerfile:

FROM python:3.7

WORKDIR /test
ADD test /test

EXPOSE 5000

RUN pip install -r requirements.txt

ENTRYPOINT ["python", "app.py"]

使用以下命令,我在 Flask 应用程序中调用 Ganache 容器

web3 = Web3(HTTPProvider("http://0.0.0.0:8545"))

我通过 `docker-compose up.我收到以下错误消息

ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=8545)

也许有人可以帮我解决这个问题。

非常感谢。

【问题讨论】:

【参考方案1】:

改变:

web3 = Web3(HTTPProvider("http://0.0.0.0:8545"))

到:

web3 = Web3(HTTPProvider("http://blockchain:8545"))

当您从 compose 设置容器时,它们都连接到 compose 创建的默认网络。 blockchain 在这种情况下是 blockchain 容器的 DNS 名称,将自动解析为容器 IP。

【讨论】:

刚刚试过这个,得到以下错误信息HTTPConnectionPool(host='blockchain', port=8545): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f2ad64d0400>: Failed to establish a new connection: [Errno 111] Connection refused')) 您能从您的主机连接到blockchain 服务吗? 当我运行docker-compose up app blockchain 时,我再次收到错误消息。但如果我先运行 docker-compose up blockchain 然后运行 ​​docker-compose up app 它就可以了。为什么会这样? 因为在app 容器尝试访问它之前,您的区块链容器可能尚未完全初始化以接受连接。而且,当您在指定服务名称的同时生成服务时,您可能会在足够长的时间间隔内执行此操作,以便在应用程序容器尝试访问它之前初始化区块链容器。检查this 非常感谢您的帮助。使用restart: always我已经能够解决错误

以上是关于我的 Flask Container 和 Ganache Container 之间没有连接的主要内容,如果未能解决你的问题,请参考以下文章

Flask实战第48天:首页轮播图实现

Flask 键盘事件

flask用户登录页面

flask importerror:无法导入名称存储

如何在 docker 容器中设置 flask-socketio?

Flask 自定义过滤器多个参数传入