You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker仍启动已删除的Worker服务及数据库连接异常问题排查求助

Docker仍启动已删除的Worker服务及数据库连接异常问题排查求助

大家好,我现在遇到了一个很棘手的问题——我想通过Docker运行我的应用,但明明已经做了很多清理操作,worker_1服务还是会自动启动,并且一个劲地尝试连接localhost的Redis,同时后端服务还连不上PostgreSQL数据库,报错连接被拒绝。下面是我目前的配置和遇到的错误,麻烦大家帮我看看问题出在哪了?

我的环境配置

1. .env文件

我已经注释掉了本地Redis的配置,原本保留了指向Docker容器Redis的配置(不过后来也把Redis相关的配置在settings里全部注释了):

DATABASE_URL=postgres://db_user:db_password@db/db_name
#DATABASE_URL=postgres://postgres:123@127.0.0.1/olx-killer
# Redis
#REDIS_URL=redis://localhost:6379
REDIS_URL=redis://redis:6379

2. settings.py配置

我把所有Redis和Celery相关的配置都彻底注释掉了,确保应用不会加载这些服务:

# Redis
#REDIS_URL = os.getenv('REDIS_URL', 'redis://redis:6379/')
#REDIS_CACHE_URL = f'{REDIS_URL}/1'


# Celery
#CELERY_TIMEZONE = TIME_ZONE
#CELERY_TASK_TRACK_STARTED = True
#CELERY_BROKER_URL = REDIS_URL
#CELERY_RESULT_BACKEND = None
#CELERY_TASK_SERIALIZER = 'json'
#CELERY_RESULT_SERIALIZER = 'json'
#CELERY_ACCEPT_CONTENT = ['json']

3. docker-compose.yml配置

我已经从compose文件里完全移除了worker服务的定义,现在只有backend和db两个核心服务:

volumes:
  pg_data:
    driver: local

x-base: &base-backend
  build: .
  volumes:
    - .:/code:delegated
  depends_on:
    - db

services:
  backend:
    <<: *base-backend
    ports:
      - "8000:8000"
    env_file: .env
    environment:
      - DJANGO_SETTINGS_MODULE=settings.main
    entrypoint: ["/code/entrypoint.sh"]
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:13
    volumes:
      - "pg_data:/var/lib/postgresql/data"
    environment:
      POSTGRES_DB: db_name
      POSTGRES_USER: db_user
      POSTGRES_PASSWORD: db_password
    ports:
      - "5432:5432"
    restart: unless-stopped

运行时的错误日志

启动Docker后,我发现worker_1居然还是会被启动,并且持续尝试连接localhost的Redis;同时后端服务报错无法连接127.0.0.1的PostgreSQL:

db_1       | 2025-02-06 17:22:20.576 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1       | 2025-02-06 17:22:20.577 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1       | 2025-02-06 17:22:20.581 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1       | 2025-02-06 17:22:20.588 UTC [63] LOG:  database system was shut down at 2025-02-06 17:22:20 UTC
db_1       | 2025-02-06 17:22:20.596 UTC [1] LOG:  database system is ready to accept connections
worker_1   | /usr/local/lib/python3.12/site-packages/celery/platforms.py:829: SecurityWarning: You're running the worker with superuser privileges: this is
worker_1   | absolutely not recommended!
worker_1   | 
worker_1   | Please specify a different user using the --uid option.
worker_1   | 
worker_1   | User information: uid=0 euid=0 gid=0 egid=0
worker_1   | 
worker_1   |   warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
worker_1   |  
worker_1   |  -------------- celery@7625f54ed8c5 v5.4.0 (opalescent)
worker_1   | --- ***** ----- 
worker_1   | -- ******* ---- Linux-5.15.153.1-microsoft-standard-WSL2-x86_64-with-glibc2.36 2025-02-06 19:22:26
worker_1   | - *** --- * --- 
worker_1   | - ** ---------- [config]
worker_1   | - ** ---------- .> app:         OLX Clone:0x7f7e62f015b0
worker_1   | - ** ---------- .> transport:   redis://localhost:6379//
worker_1   | - ** ---------- .> results:     disabled://
worker_1   | - *** --- * --- .> concurrency: 12 (prefork)
worker_1   | -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
worker_1   | --- ***** ----- 
worker_1   |  -------------- [queues]
worker_1   |                 .> celery           exchange=celery(direct) key=celery
worker_1   |                 
worker_1   | 
worker_1   | [tasks]
worker_1   |   . delete_product_file
worker_1   | 
worker_1   | [2025-02-06 19:22:28,120: WARNING/MainProcess] /usr/local/lib/python3.12/site-packages/celery/worker/consumer/consumer.py:508: CPendingDeprecationWarning: The broker_connection_retry configuration setting will no longer determine
worker_1   | whether broker connection retries are made during startup in Celery 6.0 and above.
worker_1   | If you wish to retain the existing behavior for retrying connections on startup,
worker_1   | you should set broker_connection_retry_on_startup to True.
worker_1   |   warnings.warn(
worker_1   | 
worker_1   | [2025-02-06 19:22:28,124: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379//: Error 99 connecting to localhost:6379. Cannot assign requested address..
worker_1   | Trying again in 2.00 seconds... (1/100)
worker_1   | 
worker_1   | [2025-02-06 19:22:30,197: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379//: Error 99 connecting to localhost:6379. Cannot assign requested address..
worker_1   | Trying again in 4.00 seconds... (2/100)
worker_1   | 
backend_1  | Traceback (most recent call last):
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 279, in ensure_connection
backend_1  |     self.connect()
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
backend_1  |     return func(*args, **kwargs)
backend_1  |            ^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 256, in connect
backend_1  |     self.connection = self.get_new_connection(conn_params)
backend_1  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
backend_1  |     return func(*args, **kwargs)
backend_1  |            ^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/postgresql/base.py", line 350, in get_new_connection
backend_1  |     connection = self.Database.connect(**conn_params)
backend_1  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/psycopg2/__init__.py", line 122, in connect
backend_1  |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
backend_1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  | psycopg2.OperationalError: connection to server at "127.0.0.1", port 5432 failed: Connection refused
backend_1  |    Is the server running on that host and accepting TCP/IP connections?
backend_1  | 
backend_1  | 
backend_1  | The above exception was the direct cause of the following exception:
backend_1  | 
backend_1  | Traceback (most recent call last):
backend_1  |   File "/code/manage.py", line 23, in <module>
backend_1  |     main()
backend_1  |   File "/code/manage.py", line 19, in main
backend_1  |     execute_from_command_line(sys.argv)
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
backend_1  |     utility.execute()
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/core/management/__init__.py", line 436, in execute
backend_1  |     self.fetch_command(subcommand).run_from_argv(self.argv)
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 413, in run_from_argv
backend_1  |     self.execute(*args, **cmd_options)
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 459, in execute
backend_1  |     output = self.handle(*args, **options)
backend_1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/core/management/commands/showmigrations.py", line 67, in handle
backend_1  |     return self.show_list(connection, options["app_label"])
backend_1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/core/management/commands/showmigrations.py", line 86, in show_list
backend_1  |     loader = MigrationLoader(connection, ignore_no_migrations=True)
backend_1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/loader.py", line 58, in __init__
backend_1  |     self.build_graph()
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/loader.py", line 235, in build_graph
backend_1  |     self.applied_migrations = recorder.applied_migrations()
backend_1  |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/recorder.py", line 89, in applied_migrations
backend_1  |     if self.has_table():
backend_1  |        ^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/migrations/recorder.py", line 63, in has_table
backend_1  |     with self.connection.cursor() as cursor:
backend_1  |          ^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
backend_1  |     return func(*args, **kwargs)
backend_1  |            ^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 320, in cursor
backend_1  |     return self._cursor()
backend_1  |            ^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 296, in _cursor
backend_1  |     self.ensure_connection()
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
backend_1  |     return func(*args, **kwargs)
backend_1  |            ^^^^^^^^^^^^^^^^^^^^^
backend_1  |   File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 278, in ensure_connection
backend_1  |     with self.connection.cursor() as cursor:
backend_1  |          ^^^^^^^^^^^^^^^^^^^^^^^^
backend_1  | psycopg2.OperationalError: connection to server at "127.0.0.1", port 5432 failed: Connection refused
backend_1  |    Is the server running on that host and accepting TCP/IP connections?

我目前的疑问

  1. 明明已经在docker-compose.yml里完全移除了worker服务的定义,为什么worker_1还会被启动?难道是有残留的Docker容器或者缓存没清理干净?
  2. 后端服务为什么会尝试连接127.0.0.1的PostgreSQL?我的.env里明明配置的是postgres://db_user:db_password@db/db_name,应该指向Docker网络里的db服务才对。

麻烦各位帮我分析一下问题根源,或者给我一些排查的方向,谢谢大家!


备注:内容来源于stack exchange,提问作者Anton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:08:06