fastapi 映像未与 postgres 容器连接

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

我正在尝试创建一个完整的堆栈应用程序(fastapi后端、postgres数据库和用于迁移的alembic),我使用命令创建了一个postgres docker容器

docker run -p 5432:5432 -e  POSTGRES_USER=user -e POSTGRES_PASSWORD=pw --name postgres_db --rm postgres

对于 fastapi 后端,我的 dockerfile 是

FROM python:3.10
WORKDIR /app/
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt --upgrade
COPY . .
ENV DATABASE_URL=postgresql://user:pw@postgres_db:5432/user
ENV DB_USER=user
ENV DB_PASSWORD=pw
ENV DB_HOST=postgres_db
ENV DB_PORT=5432
RUN alembic upgrade HEAD
EXPOSE 8000
CMD [ "uvicorn", "main:app", "--reload" ]

当我跑步时

docker build . -t backend

我收到错误为

[+] Building 3.3s (11/11) FINISHED                                                                                                             docker:default
 => [internal] load .dockerignore                                                                                                                        0.0s
 => => transferring context: 46B                                                                                                                         0.0s
 => [internal] load build definition from Dockerfile                                                                                                     0.0s
 => => transferring dockerfile: 410B                                                                                                                     0.0s
 => [internal] load metadata for docker.io/library/python:3.10                                                                                           2.0s
 => [auth] library/python:pull token for registry-1.docker.io                                                                                            0.0s
 => [internal] load build context                                                                                                                        0.0s
 => => transferring context: 1.13kB                                                                                                                      0.0s
 => [1/6] FROM docker.io/library/python:3.10@sha256:eac7369136625549bc3f7461fe072b1030f538ea20d6291e9b56896d6a40559c                                     0.0s
 => CACHED [2/6] WORKDIR /app/                                                                                                                           0.0s
 => CACHED [3/6] COPY requirements.txt ./                                                                                                                0.0s
 => CACHED [4/6] RUN pip install --no-cache-dir -r requirements.txt --upgrade                                                                            0.0s
 => CACHED [5/6] COPY . .                                                                                                                                0.0s
 => ERROR [6/6] RUN alembic upgrade HEAD                                                                                                                 1.2s
------                                                                                                                                                        
 > [6/6] RUN alembic upgrade HEAD:                                                                                                                            
1.100 Traceback (most recent call last):                                                                                                                      
1.100   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3371, in _wrap_pool_connect                                            
1.101     return fn()                                                                                                                                         
1.101   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 327, in connect                                                          
1.101     return _ConnectionFairy._checkout(self)
1.101   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 894, in _checkout
1.102     fairy = _ConnectionRecord.checkout(pool)
1.102   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 493, in checkout
1.102     rec = pool._do_get()
1.102   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 256, in _do_get
1.102     return self._create_connection()
1.102   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 273, in _create_connection
1.103     return _ConnectionRecord(self)
1.103   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 388, in __init__
1.103     self.__connect()
1.103   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 690, in __connect
1.103     with util.safe_reraise():
1.103   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
1.104     compat.raise_(
1.104   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
1.104     raise exception
1.104   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 686, in __connect
1.104     self.dbapi_connection = connection = pool._invoke_creator(self)
1.104   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 574, in connect
1.105     return dialect.connect(*cargs, **cparams)
1.105   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 598, in connect
1.105     return self.dbapi.connect(*cargs, **cparams)
1.105   File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
1.105     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
1.105 psycopg2.OperationalError: could not translate host name "postgres_db" to address: Name or service not known
1.105 
1.105 
1.105 The above exception was the direct cause of the following exception:
1.105 
1.105 Traceback (most recent call last):
1.105   File "/usr/local/bin/alembic", line 8, in <module>
1.106     sys.exit(main())
1.106   File "/usr/local/lib/python3.10/site-packages/alembic/config.py", line 630, in main
1.106     CommandLine(prog=prog).main(argv=argv)
1.106   File "/usr/local/lib/python3.10/site-packages/alembic/config.py", line 624, in main
1.106     self.run_cmd(cfg, options)
1.106   File "/usr/local/lib/python3.10/site-packages/alembic/config.py", line 601, in run_cmd
1.107     fn(
1.107   File "/usr/local/lib/python3.10/site-packages/alembic/command.py", line 398, in upgrade
1.107     script.run_env()
1.107   File "/usr/local/lib/python3.10/site-packages/alembic/script/base.py", line 579, in run_env
1.108     util.load_python_file(self.dir, "env.py")
1.108   File "/usr/local/lib/python3.10/site-packages/alembic/util/pyfiles.py", line 93, in load_python_file
1.108     module = load_module_py(module_id, path)
1.108   File "/usr/local/lib/python3.10/site-packages/alembic/util/pyfiles.py", line 109, in load_module_py
1.108     spec.loader.exec_module(module)  # type: ignore
1.108   File "<frozen importlib._bootstrap_external>", line 883, in exec_module
1.108   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
1.108   File "/app/alembic/env.py", line 90, in <module>
1.109     run_migrations_online()
1.109   File "/app/alembic/env.py", line 78, in run_migrations_online
1.109     with connectable.connect() as connection:
1.109   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3325, in connect
1.110     return self._connection_cls(self, close_with_result=close_with_result)
1.110   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
1.111     else engine.raw_connection()
1.111   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3404, in raw_connection
1.113     return self._wrap_pool_connect(self.pool.connect, _connection)
1.113   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3374, in _wrap_pool_connect
1.114     Connection._handle_dbapi_exception_noconnection(
1.114   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2208, in _handle_dbapi_exception_noconnection
1.115     util.raise_(
1.115   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
1.115     raise exception
1.115   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3371, in _wrap_pool_connect
1.117     return fn()
1.117   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 327, in connect
1.117     return _ConnectionFairy._checkout(self)
1.117   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 894, in _checkout
1.118     fairy = _ConnectionRecord.checkout(pool)
1.118   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 493, in checkout
1.118     rec = pool._do_get()
1.118   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 256, in _do_get
1.118     return self._create_connection()
1.118   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 273, in _create_connection
1.119     return _ConnectionRecord(self)
1.119   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 388, in __init__
1.119     self.__connect()
1.119   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 690, in __connect
1.119     with util.safe_reraise():
1.119   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
1.120     compat.raise_(
1.120   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
1.120     raise exception
1.120   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 686, in __connect
1.120     self.dbapi_connection = connection = pool._invoke_creator(self)
1.120   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 574, in connect
1.121     return dialect.connect(*cargs, **cparams)
1.121   File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 598, in connect
1.121     return self.dbapi.connect(*cargs, **cparams)
1.121   File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
1.121     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
1.121 sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name "postgres_db" to address: Name or service not known
1.121 
1.121 (Background on this error at: https://sqlalche.me/e/14/e3q8)
------
Dockerfile:12
--------------------
  10 |     ENV DB_PORT=5432
  11 |     #ENV DB_HOST=172.18.0.2
  12 | >>> RUN alembic upgrade HEAD
  13 |     EXPOSE 8000
  14 |     CMD [ "uvicorn", "main:app", "--reload" ]
--------------------
ERROR: failed to solve: process "/bin/sh -c alembic upgrade HEAD" did not complete successfully: exit code: 1

当我在本地运行postgres服务时,不会出现错误。我也尝试将我的 postgres_db IP 地址放入环境中,但出现同样的错误。

postgresql docker fastapi alembic
1个回答
0
投票
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not translate host name "postgres_db" to address: Name or service not known

您可以通过使用 127.0.0.1(或 localhost)作为主机地址来解决这个特定问题

ENV DATABASE_URL=postgresql://user:[email protected]:5432/user
© www.soinside.com 2019 - 2024. All rights reserved.