【发布时间】:2020-11-15 14:17:27
【问题描述】:
有很多关于类似问题的过时信息,我都经历过。我正在运行 docker-compose 文件版本3.8。我的问题是:
psycopg2 或 Django 无法解析我的数据库的容器名称。
但是,我可以在docker-compose up 之后:
gerard@solace ~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21bcbcc35083 project_web "/app/entrypoint.sh …" 6 seconds ago Up 6 seconds 0.0.0.0:8006->8000/tcp project_web_1
a92e3e98477f postgres:12.0-alpine "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 0.0.0.0:5432->5432/tcp project_db_1
gerard@solace ~$ docker exec -it project_web_1 ping -c 2 db
PING db (172.25.0.2): 56 data bytes
64 bytes from 172.25.0.2: seq=0 ttl=64 time=0.078 ms
64 bytes from 172.25.0.2: seq=1 ttl=64 time=0.302 ms
--- db ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.078/0.190/0.302 ms```
另外,我的entrypoint.sh 在继续之前连接,并且确实继续,因此主机和端口似乎可以访问:
入口点sn-p:
while ! nc -z $SQL_HOST $SQL_PORT; do
sleep 1
done
我错过了什么?
要完整。我已经“详细”了网络容器中的所有内容,以确保所有内容都来自 .env 文件以及其他内容,并且一切看起来都很好
db_1 | 2020-11-15 14:35:18.557 UTC [1] LOG: starting PostgreSQL 12.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 8.3.0) 8.3.0, 64-bit
db_1 | 2020-11-15 14:35:18.557 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
db_1 | 2020-11-15 14:35:18.557 UTC [1] LOG: listening on IPv6 address "::", port 5432
web_1 | Waiting for postgres...
web_1 | PostgreSQL started
db_1 | 2020-11-15 14:35:18.559 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1 | 2020-11-15 14:35:18.575 UTC [18] LOG: database system was shut down at 2020-11-15 14:35:16 UTC
db_1 | 2020-11-15 14:35:18.580 UTC [1] LOG: database system is ready to accept connections
web_1 | YO: -----------------------------------------
web_1 | SQL_ENGINE ('django.db.backends.postgresql',)
web_1 | SQL_DATABASE ('diff_api_d',)
web_1 | SQL_HOST ('db',)
web_1 | SQL_PORT 5432
web_1 | SQL_USER ('diff_api_u',)
web_1 | SQL_PASSWORD ('diff_api_p',)
web_1 | Traceback (most recent call last):
web_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection
web_1 | self.connect()
web_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
web_1 | return func(*args, **kwargs)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 197, in connect
web_1 | self.connection = self.get_new_connection(conn_params)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
web_1 | return func(*args, **kwargs)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection
web_1 | connection = Database.connect(**conn_params)
web_1 | File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
web_1 | conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
web_1 | psycopg2.OperationalError: could not translate host name "('db'" to address: Name does not resolve
web_1 | could not translate host name ")" to address: Name does not resolve
【问题讨论】:
-
对我来说,它看起来像是连接字符串中的错误。什么是或如何构建连接字符串?
-
这是一个默认的 Django 安装。除了设置了一些变量的 settings.py 之外,它是 DATABASES 字典,其中包含用于它的设置。
-
我只是看到
could not translate host name "('db'"。对我来说,这看起来像是一个格式错误的主机名。就像元组被替换为字符串一样。 -
呃,你找到了!干得好,谢谢 ??????️ ????️...我已经改组了一些代码,使我的 settings.py 更通用,并将 dict 中的行复制到将它们设置为 vars,我忘了删除逗号: SQL_HOST = os.environ.get("SQL_HOST"),
标签: django postgresql docker