【问题标题】:Fedora: Application Container Cannot establish connection to DB ContainerFedora:应用程序容器无法建立与数据库容器的连接
【发布时间】:2021-01-30 08:22:42
【问题描述】:

我无法从 Fedora 主机上的应用程序容器连接到数据库容器。我已经验证能够通过 psql 命令行界面使用相同的凭据连接到数据库。在我的应用程序中使用相同的信息不起作用。

这是我的 docker compose 文件

version: '3.3'

services:
    postgrestest:
        build: ./vrs
        command: python3 app.py
        volumes:
            - ./vrs/:/appuser/
        ports:
          - 5000:5000
        env_file:
            - ./.env.dev
        depends_on:
            - db
    
    db:
        image: postgres:12-alpine
        volumes:
            - postgres_data:/var/lib/postgresql/data/
        environment:
            - POSTGRES_USER={{user}}
            - POSTGRES_PASSWORD={{password}}
            - POSTGRES_DB=sharepointvrs

volumes:
    postgres_data:

这是用于从应用程序容器内连接到容器的代码:


dbconfig = environment["database"]


try:
    connection = psycopg2.connect(
        dbname=dbconfig["dbname"], #sharepointvrs
        user=dbconfig["user"],
        password=dbconfig["password"],
        host=dbconfig["host"], # tried 0.0.0.0, localhost, and IP address obtained from docker inspect
        port=dbconfig["port"] # 5432
    )
    connection.autocommit = True
except:
    print("Database initialization failed.")

我已经尝试过使用 localhost 和通过运行 docker inspect 获得的 IP:

【问题讨论】:

  • 当你尝试连接时,数据库真的启动了吗?您是否阅读过诸如 Networking in Compose 这样描述您可用的主机名的背景材料?

标签: postgresql docker flask docker-compose psycopg2


【解决方案1】:

# tried 0.0.0.0, localhost, and IP address obtained from docker inspect

在您应用的配置中,将数据库主机设置为'db'

它作为 DNS 别名存在,可在其他容器中使用,具体取决于您在撰写文件中设置的服务名称:

services:
  db:
    # ... 

【讨论】:

  • 会试一试
  • 容器能够解析主机但连接仍然无法正常工作,任何其他建议
【解决方案2】:

问题是由 Fedora 上的 docker 安装配置的防火墙接口策略引起的。

Docker 必须在安装前添加到受信任区域。

更多信息here

【讨论】:

  • 有趣。感谢您发布您的解决方案。你最后在你的应用中设置了什么主机?
猜你喜欢
  • 2022-07-28
  • 2018-02-25
  • 2016-09-22
  • 1970-01-01
  • 2017-10-17
  • 2021-11-23
  • 2016-04-17
  • 1970-01-01
  • 2020-12-23
相关资源
最近更新 更多