【发布时间】:2024-12-25 01:05:02
【问题描述】:
我创建了 docker-compose 文件。
version: '3'
services:
fastapi_cont:
build: 'api_file/'
ports:
- 8000:8000
depends_on:
- postg
networks:
- quest_network
container_name: fastapi_cont
postg:
image: postgres:latest
ports:
- 5432:5432
env_file:
- api_file/utils/db.env
networks:
- quest_network
container_name: postg
streamlit_cont:
build: 'streamlit/'
depends_on:
- postg
- fastapi_cont
ports:
- 8502:8502
networks:
- quest_network
networks:
quest_network:
driver: bridge
运行时docker-compose up --build
当主机名被命名为 Postgres 容器名时出现此错误::
Pulling postg (postgres:latest)...
latest: Pulling from library/postgres
e5ae68f74026: Pull complete
7b8fcc7e1ad0: Pull complete
7527d03e2f77: Pull complete
80e55689f4d0: Pull complete
8a79eb6d69c9: Pull complete
397705f2d093: Pull complete
de36ec4eb0a5: Pull complete
08d878a022c1: Pull complete
7677029670ff: Pull complete
1d24b3d9557e: Pull complete
e085b018338c: Pull complete
063b09ff12e9: Pull complete
a39fee215a44: Pull complete
Digest: sha256:f76241d07218561e3d1a334eae6a5bf63c70b49f35ffecb7f020448e30e37390
Status: Downloaded newer image for postgres:latest
Building fastapi_cont
[+] Building 14.6s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 34B 0.0s
=> [internal] load metadata for docker.io/library/python:3.8.12 3.1s
=> [1/5] FROM docker.io/library/python:3.8.12@sha256:881e0df149c29af8b29a973a9e80814dae6cddf123fe38a0bcac71864c85fb8a 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 1.69kB 0.0s
=> CACHED [2/5] WORKDIR api_file 0.0s
=> CACHED [3/5] COPY . ./api_file/ 0.0s
=> CACHED [4/5] RUN pip install -r ./api_file/fastapi_requriements.txt 0.0s
=> ERROR [5/5] RUN python ./api_file/connection.py 11.4s
------
> [5/5] RUN python ./api_file/connection.py:
#9 10.81 Traceback (most recent call last):
#9 10.81 File "./api_file/connection.py", line 9, in <module>
#9 10.81 connector=psycopg2.connect(dbname=database_settings.DATABASE,
#9 10.81 File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect
#9 10.81 conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
#9 10.81 psycopg2.OperationalError: could not translate host name "postg" to address: Temporary failure in name resolution
#9 10.81
------
executor failed running [/bin/sh -c python ./api_file/connection.py]: exit code: 1
ERROR: Service 'fastapi_cont' failed to build : Build failed
当我将主机名更改为 localhost 时,出现以下错误::
9 1.033 Traceback (most recent call last):
#9 1.033 File "./api_file/connection.py", line 9, in <module>
#9 1.033 connector=psycopg2.connect(dbname=database_settings.DATABASE,
#9 1.033 File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect
#9 1.033 conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
#9 1.033 psycopg2.OperationalError: could not connect to server: Connection refused
#9 1.033 Is the server running on host "localhost" (127.0.0.1) and accepting
#9 1.033 TCP/IP connections on port 5432?
#9 1.033 could not connect to server: Cannot assign requested address
#9 1.033 Is the server running on host "localhost" (::1) and accepting
#9 1.033 TCP/IP connections on port 5432?
#9 1.033
即使删除 docker-compose 并单独运行 Postgres docker,在它启动后,当我运行 fastapi docker 文件时。我遇到了同样的错误。
fastapi 的 dockerfile 是
FROM python:3.8.12
WORKDIR api_file
COPY . ./api_file/
RUN pip install -r ./api_file/fastapi_requriements.txt
RUN python ./api_file/connection.py
CMD uvicorn api_file.main:app
connection.py 的起始行是
import psycopg2
from utils.config_reader import database_settings
from psycopg2.extras import DictCursor
import time
from utils.y_labels import y_columns
from psycopg2 import sql
connector=None
connector=psycopg2.connect(dbname=database_settings.DATABASE,
user=database_settings.DATABASE_USER,
password=database_settings.DATABASE_PASSWORD,
host=database_settings.HOSTNAME,
port=database_settings.PORT,
cursor_factory=DictCursor)
cursor=connector.cursor()
#while True:
# try:
# connector=psycopg2.connect(dbname=database_settings.DATABASE,
# user=database_settings.DATABASE_USER,
# password=database_settings.DATABASE_PASSWORD,
# host=database_settings.HOSTNAME,
# port=database_settings.PORT,
# cursor_factory=DictCursor)
#
# cursor=connector.cursor()
# print("WE MADE A SUCCESSFUL CONNECTION TO THE DATABASE")
# break
# except Exception as error:
# print("CONNECTION FAILED")
# print("ERROR : ",error)
# time.sleep(2)
我还尝试将连接代码保留在 while 块中。以防万一数据库没有启动,然后它会再次运行。但是,它继续运行。所以,我现在评论了它。
【问题讨论】:
-
您使用的确切数据库主机名和端口是什么?
-
主机名是 postg(这是我保留的 postgres 容器名称),端口是 5432。
标签: postgresql docker docker-compose fastapi