CVAT创建超级用户失败:PostgreSQL连接超时问题求助
我在Ubuntu 22.04.1 LTS系统上按照CVAT官方安装指南部署,第一步执行顺利,但运行创建超级用户的命令:
docker exec -it cvat_server bash -ic 'python3 ~/manage.py createsuperuser'
数分钟后出现如下错误:
Traceback (most recent call last):
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/opt/venv/lib/python3.8/site-packages/django/utils/asyncio.py", line 33, in inner
return func(*args, **kwargs)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/opt/venv/lib/python3.8/site-packages/django/utils/asyncio.py", line 33, in inner
return func(*args, **kwargs)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
connection = Database.connect(**conn_params)
File "/opt/venv/lib/python3.8/site-packages/psycopg2/init.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection timed out
Is the server running on host "cvat_db" (172.18.0.3) and accepting
TCP/IP connections on port 5432?The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/django/manage.py", line 21, in
execute_from_command_line(sys.argv)
File "/opt/venv/lib/python3.8/site-packages/django/core/management/init.py", line 419, in execute_from_command_line
utility.execute()
File "/opt/venv/lib/python3.8/site-packages/django/core/management/init.py", line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/venv/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
self.execute(*args, **cmd_options)
File "/opt/venv/lib/python3.8/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 79, in execute
return super().execute(*args, **options)
File "/opt/venv/lib/python3.8/site-packages/django/core/management/base.py", line 397, in execute
self.check_migrations()
File "/opt/venv/lib/python3.8/site-packages/django/core/management/base.py", line 486, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
File "/opt/venv/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in init
self.loader = MigrationLoader(self.connection)
File "/opt/venv/lib/python3.8/site-packages/django/db/migrations/loader.py", line 53, in init
self.build_graph()
File "/opt/venv/lib/python3.8/site-packages/django/db/migrations/loader.py", line 220, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "/opt/venv/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
if self.has_table():
File "/opt/venv/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 55, in has_table
with self.connection.cursor() as cursor:
File "/opt/venv/lib/python3.8/site-packages/django/utils/asyncio.py", line 33, in inner
return func(*args, **kwargs)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor
return self._cursor()
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor
self.ensure_connection()
File "/opt/venv/lib/python3.8/site-packages/django/utils/asyncio.py", line 33, in inner
return func(*args, **kwargs)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/opt/venv/lib/python3.8/site-packages/django/db/utils.py", line 90, in exit
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/opt/venv/lib/python3.8/site-packages/django/utils/asyncio.py", line 33, in inner
return func(*args, **kwargs)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/opt/venv/lib/python3.8/site-packages/django/utils/asyncio.py", line 33, in inner
return func(*args, **kwargs)
File "/opt/venv/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
connection = Database.connect(**conn_params)
File "/opt/venv/lib/python3.8/site-packages/psycopg2/init.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: Connection timed out
Is the server running on host "cvat_db" (172.18.0.3) and accepting
TCP/IP connections on port 5432?
我曾尝试安装django-auth来解决问题,但没有任何效果。请问该如何修复此问题以正常使用CVAT?
这个错误核心是cvat_server容器无法连接到cvat_db(PostgreSQL)容器,以下是针对性修复步骤:
1. 检查cvat_db容器状态
先确认数据库容器是否正常运行:
docker ps | grep cvat_db
- 若容器未运行,启动它:
docker start cvat_db - 若容器状态异常(如Exited),查看日志排查启动失败原因:
docker logs cvat_db
2. 验证容器间网络连通性
进入cvat_server容器,测试与cvat_db的连通性:
docker exec -it cvat_server bash # 测试ping连通性 ping cvat_db # 测试5432端口是否开放 telnet cvat_db 5432
如果ping不通,说明Docker网络存在问题,尝试重启Docker服务:
sudo systemctl restart docker
重启后重新启动所有CVAT容器:
docker-compose -f docker-compose.yml up -d
3. 检查PostgreSQL远程连接配置
若cvat_db容器已启动但仍无法连接,进入容器检查配置:
docker exec -it cvat_db bash # 查看pg_hba.conf,确认允许Docker子网连接 cat /var/lib/postgresql/data/pg_hba.conf
确保存在类似配置:
host all all 172.18.0.0/16 scram-sha-256
再检查监听地址设置:
cat /var/lib/postgresql/data/postgresql.conf | grep listen_addresses
确保设置为listen_addresses = '*'。修改配置后重启容器:
docker restart cvat_db
4. 重置CVAT容器环境(以上步骤无效时)
若问题依旧,尝试重置整个环境(注意:此操作会清除所有数据,谨慎执行):
# 停止并删除所有CVAT容器 docker-compose -f docker-compose.yml down # 删除数据库卷 docker volume rm cvat_db # 重新构建并启动容器 docker-compose -f docker-compose.yml up -d --build
等待所有容器完全启动(约几分钟)后,再执行创建超级用户命令。
5. 检查系统防火墙设置
确认Ubuntu的ufw防火墙未阻止Docker容器间通信:
sudo ufw status
若防火墙启用,可临时关闭测试:
sudo ufw disable
测试完成后再根据需求重新配置防火墙规则。
内容的提问来源于stack exchange,提问作者arnino

