我的 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 升级或降级数据库架构。
请求帮助 我将不胜感激有关解决这些问题的任何指导:
环境
如果您需要更多详细信息,请告诉我。
谢谢!
这个答案只涉及第一个问题。由于您没有使用 docker-compose 而是手动创建容器,因此您需要创建一个 docker 网络并将数据库容器以及应用程序容器添加到网络中。之后就可以找到数据库容器在网络内的IP了。
docker network create yournetworkname
docker network connect yournetworkname containerhashofdb
& docker network connect yournetworkname containerhashofapplication
docker network inspect yournetworkname
(这些说明仅适用于 MacOS 和 Linux,因为您使用的是 Windows,请检查相应的 Windows 说明)