无法将 Python 应用程序连接到 Docker PostgreSQL 且未找到 AWS 配置文件

问题描述 投票:0回答:1

我的 Python 应用程序遇到两个主要问题,该应用程序在 Windows 11 和 AWS 上的 WSL 上运行的 Docker 中使用 PostgreSQL:

数据库连接问题

Error: could not translate host name "0.0.0.0" to address: Name or service not known
上下文:运行 python app/main.py 时,应用程序无法连接到在 Docker 容器内运行的 PostgreSQL 数据库。

详情: 我有一个运行 PostgreSQL 的 Docker 容器,映射到本地主机上的端口 5433。

数据库连接的环境变量设置如下:

export DB_HOST="localhost"
export DB_PORT="5433"
export DB_NAME="" (omitted)
export DB_USERNAME=""  (omitted)
export DB_PASSWORD="" (omitted)

AWS 凭证问题

Error: ProfileNotFound: The config profile ( (omitted) ) could not be found
上下文:当尝试通过 Boto3 使用 AWS 服务时,应用程序无法找到指定的 AWS 配置文件。

详情: AWS环境变量设置如下:

export AWS_SHARED_CREDENTIALS_FILE="/home/ (omitted)/.aws/credentials"
export AWS_CONFIG_FILE="/home/ (omitted)/.aws/config"

1。数据库连接问题

初始设置:

PostgreSQL 的 Docker 容器已设置并运行。 用于运行 PostgreSQL 容器的 Docker 命令:

docker run --name my_postgres -e POSTGRES_USER=(omitted) -e POSTGRES_PASSWORD=(omitted) -e POSTGRES_DB=(omitted) -p 5432:5432 -d postgres

遇到错误:

The application threw the error: could not translate host name "0.0.0.0" to address: Name or service not known.

故障排除步骤:

Docker端口冲突: 意识到默认的 PostgreSQL 端口 5432 可能正在使用中。将端口映射更改为5433:

docker run --name my_postgres -e POSTGRES_USER=(omitted) -e POSTGRES_PASSWORD=(omitted) -e POSTGRES_DB=(omitted) -p 5433:5432 -d postgres

已停止本地 PostgreSQL 服务:

停止本地 PostgreSQL 服务以避免冲突,使用:

sudo service postgresql stop

已验证的 Docker 容器: 验证容器正在运行并映射到正确的端口:

docker ps

输出:

CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                       NAMES
9c8d0a1647ed   postgres   "docker-entrypoint.s…"   8 seconds ago   Up 7 seconds   0.0.0.0:5433->5432/tcp, :::5433->5432/tcp   my_postgres

当前状态:

尽管将 DB_HOST 设置为 localhost 并映射容器端口,应用程序仍然无法连接并出现错误:无法将主机名“0.0.0.0”转换为地址:名称或服务未知。

2。 AWS 凭证问题

遇到错误:

应用程序抛出了

error: ProfileNotFound: The config profile ( (omitted) ) could not be found.
故障排除步骤:

环境变量: 正确设置AWS环境变量:

export AWS_SHARED_CREDENTIALS_FILE="/home/(omitted)/.aws/credentials"
export AWS_CONFIG_FILE="/home/(omitted)/.aws/config"

已验证的 AWS 配置文件: 检查 AWS 凭证和配置文件的内容,确保它们的格式和位置正确。

当前状态:

尽管设置了环境变量并验证了配置文件,应用程序仍然无法识别 AWS 配置文件,或者如果似乎设置了它们,则会返回连接问题。

这是运行 main.py 脚本的结果。 main.py 脚本用于管理 PostgreSQL 数据库。它可以使用 Alembic 升级或降级数据库架构。

请求帮助 我将不胜感激有关解决这些问题的任何指导:

  1. 什么可能导致数据库连接问题?
  2. 为什么尽管设置了环境变量,AWS 配置文件仍无法被识别?

环境

  • Windows 11
  • Ubuntu WSL2
  • Docker
  • PostgreSQL
  • Python 3.9
  • 用于 AWS 交互的 Boto3

如果您需要更多详细信息,请告诉我。

谢谢!

python postgresql amazon-web-services docker boto3
1个回答
0
投票

这个答案只涉及第一个问题。由于您没有使用 docker-compose 而是手动创建容器,因此您需要创建一个 docker 网络并将数据库容器以及应用程序容器添加到网络中。之后就可以找到数据库容器在网络内的IP了。

  1. 创建网络:
    docker network create yournetworkname
  2. 将两个容器添加到网络:
    docker network connect yournetworkname containerhashofdb
    &
    docker network connect yournetworkname containerhashofapplication
  3. 检查网络以找出数据库的IP:
    docker network inspect yournetworkname
  4. 找到数据库容器的 IP 并在应用程序中使用此 IP。

(这些说明仅适用于 MacOS 和 Linux,因为您使用的是 Windows,请检查相应的 Windows 说明)

© www.soinside.com 2019 - 2024. All rights reserved.