Skip to content

v1.8.2 编译docker image后 运行错误 #429

@zhanglt

Description

@zhanglt

Pre-checks

Deployment Method

Docker

Steps to Reproduce

1、切换到v1.8.2分支
2、编译 docker-compose build
3、运行 docker-compose up

Expected vs Actual Behavior

不能正常启动服务

Logs / Screenshots

frontend-1 | 2026/04/16 14:48:39 [notice] 1#1: start worker process 43
frontend-1 | 2026/04/16 14:48:39 [notice] 1#1: start worker process 44
backend-1 | [entrypoint] Tables created/verified
backend-1 | [entrypoint] Column patches applied
backend-1 | [entrypoint] Step 2: Running alembic migrations...
postgres-1 | 2026-04-16 14:48:40.983 UTC [41] ERROR: column "username" does not exist at character 149
postgres-1 | 2026-04-16 14:48:40.983 UTC [41] STATEMENT:
postgres-1 | INSERT INTO participants (id, type, ref_id, display_name, avatar_url)
postgres-1 | SELECT gen_random_uuid(), 'user', id, COALESCE(display_name, username), avatar_url
postgres-1 | FROM users
postgres-1 | ON CONFLICT DO NOTHING
postgres-1 |
backend-1 |
backend-1 | ========================================================================
backend-1 | [entrypoint] WARNING: Alembic migration FAILED (exit code 1)
backend-1 | ========================================================================
backend-1 |
backend-1 | INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
backend-1 | INFO [alembic.runtime.migration] Will assume transactional DDL.
backend-1 | INFO [alembic.runtime.migration] Running upgrade -> add_quota_fields, Add usage quota fields to users, agents, and tenants tables.
backend-1 | INFO [alembic.runtime.migration] Running upgrade add_quota_fields -> add_agent_tool_source, Add source and installed_by_agent_id to agent_tools
backend-1 | INFO [alembic.runtime.migration] Running upgrade add_agent_tool_source -> add_chat_sessions, Add chat_sessions table and update existing chat_messages conversation_ids.
backend-1 | INFO [alembic.runtime.migration] Running upgrade add_chat_sessions -> add_invitation_codes, Add invitation_codes table.
backend-1 | INFO [alembic.runtime.migration] Running upgrade add_invitation_codes -> add_participants, Add participants table, extend chat_sessions and chat_messages, migrate messages data, drop messages table.
backend-1 | Traceback (most recent call last):
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 526, in _prepare_and_execute
backend-1 | prepared_stmt, attributes = await adapt_connection._prepare(
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 773, in _prepare
backend-1 | prepared_stmt = await self._connection.prepare(
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/asyncpg/connection.py", line 638, in prepare
backend-1 | return await self._prepare(
backend-1 | ^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/asyncpg/connection.py", line 657, in _prepare
backend-1 | stmt = await self._get_statement(
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/asyncpg/connection.py", line 443, in _get_statement
backend-1 | statement = await self._protocol.prepare(
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "asyncpg/protocol/protocol.pyx", line 165, in prepare
backend-1 | asyncpg.exceptions.UndefinedColumnError: column "username" does not exist
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 "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
backend-1 | self.dialect.do_execute(
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
backend-1 | cursor.execute(statement, parameters)
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 585, in execute
backend-1 | self.adapt_connection.await(
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
backend-1 | return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
backend-1 | value = await result
backend-1 | ^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 563, in _prepare_and_execute
backend-1 | self._handle_exception(error)
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 513, in _handle_exception
backend-1 | self._adapt_connection._handle_exception(error)
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 797, in _handle_exception
backend-1 | raise translated_error from error
backend-1 | sqlalchemy.dialects.postgresql.asyncpg.AsyncAdapt_asyncpg_dbapi.ProgrammingError: <class 'asyncpg.exceptions.UndefinedColumnError'>: column "username" does not exist
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 "/usr/local/bin/alembic", line 8, in
backend-1 | sys.exit(main())
backend-1 | ^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/config.py", line 1047, in main
backend-1 | CommandLine(prog=prog).main(argv=argv)
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/config.py", line 1037, in main
backend-1 | self.run_cmd(cfg, options)
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/config.py", line 971, in run_cmd
backend-1 | fn(
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/command.py", line 483, in upgrade
backend-1 | script.run_env()
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/script/base.py", line 545, in run_env
backend-1 | util.load_python_file(self.dir, "env.py")
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/util/pyfiles.py", line 116, in load_python_file
backend-1 | module = load_module_py(module_id, path)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/util/pyfiles.py", line 136, in load_module_py
backend-1 | spec.loader.exec_module(module) # type: ignore
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "", line 999, in exec_module
backend-1 | File "", line 488, in _call_with_frames_removed
backend-1 | File "/app/alembic/env.py", line 85, in
backend-1 | run_migrations_online()
backend-1 | File "/app/alembic/env.py", line 79, in run_migrations_online
backend-1 | asyncio.run(run_async_migrations())
backend-1 | File "/usr/local/lib/python3.12/asyncio/runners.py", line 195, in run
backend-1 | return runner.run(main)
backend-1 | ^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/asyncio/runners.py", line 118, in run
backend-1 | return self._loop.run_until_complete(task)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
backend-1 | return future.result()
backend-1 | ^^^^^^^^^^^^^^^
backend-1 | File "/app/alembic/env.py", line 73, in run_async_migrations
backend-1 | await connection.run_sync(do_run_migrations)
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/engine.py", line 888, in run_sync
backend-1 | return await greenlet_spawn(
backend-1 | ^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
backend-1 | result = context.switch(value)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/app/alembic/env.py", line 62, in do_run_migrations
backend-1 | context.run_migrations()
backend-1 | File "", line 8, in run_migrations
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/runtime/environment.py", line 969, in run_migrations
backend-1 | self.get_context().run_migrations(**kw)
backend-1 | File "/usr/local/lib/python3.12/site-packages/alembic/runtime/migration.py", line 626, in run_migrations
backend-1 | step.migration_fn(**kw)
backend-1 | File "/app/alembic/versions/add_participants.py", line 33, in upgrade
backend-1 | conn.execute(sa.text("""
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
backend-1 | return meth(
backend-1 | ^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
backend-1 | return connection._execute_clauseelement(
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
backend-1 | ret = self._execute_context(
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
backend-1 | return self._exec_single_context(
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
backend-1 | self._handle_dbapi_exception(
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
backend-1 | raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
backend-1 | self.dialect.do_execute(
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 952, in do_execute
backend-1 | cursor.execute(statement, parameters)
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 585, in execute
backend-1 | self.adapt_connection.await(
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 132, in await_only
backend-1 | return current.parent.switch(awaitable) # type: ignore[no-any-return,attr-defined] # noqa: E501
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 196, in greenlet_spawn
backend-1 | value = await result
backend-1 | ^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 563, in _prepare_and_execute
backend-1 | self._handle_exception(error)
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 513, in _handle_exception
backend-1 | self._adapt_connection._handle_exception(error)
backend-1 | File "/usr/local/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py", line 797, in _handle_exception
backend-1 | raise translated_error from error
backend-1 | sqlalchemy.exc.ProgrammingError: (sqlalchemy.dialects.postgresql.asyncpg.ProgrammingError) <class 'asyncpg.exceptions.UndefinedColumnError'>: column "username" does not exist
backend-1 | [SQL:
backend-1 | INSERT INTO participants (id, type, ref_id, display_name, avatar_url)
backend-1 | SELECT gen_random_uuid(), 'user', id, COALESCE(display_name, username), avatar_url
backend-1 | FROM users
backend-1 | ON CONFLICT DO NOTHING
backend-1 | ]
backend-1 | (Background on this error at: https://sqlalche.me/e/20/f405)
backend-1 |
backend-1 | ------------------------------------------------------------------------
backend-1 | The database schema may be INCOMPLETE. Some features will NOT work.
backend-1 | Common causes:
backend-1 | - Migration cycle detected (pull latest code to fix)
backend-1 | - Database connection issue
backend-1 | - Incompatible migration state
backend-1 |
backend-1 | To fix: pull the latest code and restart the backend.
backend-1 | Docker: git pull && docker compose restart backend
backend-1 | Source: git pull && alembic upgrade head
backend-1 | ------------------------------------------------------------------------
backend-1 |
backend-1 | [entrypoint] Continuing startup despite migration failure...
backend-1 | [entrypoint] Step 3: Starting uvicorn...
backend-1 | Traceback (most recent call last):
backend-1 | File "/usr/local/bin/uvicorn", line 8, in
backend-1 | sys.exit(main())
backend-1 | ^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1485, in call
backend-1 | return self.main(*args, **kwargs)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1406, in main
backend-1 | rv = self.invoke(ctx)
backend-1 | ^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/click/core.py", line 1269, in invoke
backend-1 | return ctx.invoke(self.callback, **ctx.params)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/click/core.py", line 824, in invoke
backend-1 | return callback(*args, **kwargs)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 433, in main
backend-1 | run(
backend-1 | File "/usr/local/lib/python3.12/site-packages/uvicorn/main.py", line 606, in run
backend-1 | server.run()
backend-1 | File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 75, in run
backend-1 | return asyncio_run(self.serve(sockets=sockets), loop_factory=self.config.get_loop_factory())
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/asyncio/runners.py", line 195, in run
backend-1 | return runner.run(main)
backend-1 | ^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/asyncio/runners.py", line 118, in run
backend-1 | return self._loop.run_until_complete(task)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "uvloop/loop.pyx", line 1518, in uvloop.loop.Loop.run_until_complete
backend-1 | File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 79, in serve
backend-1 | await self._serve(sockets)
backend-1 | File "/usr/local/lib/python3.12/site-packages/uvicorn/server.py", line 86, in _serve
backend-1 | config.load()
backend-1 | File "/usr/local/lib/python3.12/site-packages/uvicorn/config.py", line 441, in load
backend-1 | self.loaded_app = import_from_string(self.app)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/site-packages/uvicorn/importer.py", line 19, in import_from_string
backend-1 | module = importlib.import_module(module_str)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "/usr/local/lib/python3.12/importlib/init.py", line 90, in import_module
backend-1 | return _bootstrap._gcd_import(name[level:], package, level)
backend-1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-1 | File "", line 1387, in _gcd_import
backend-1 | File "", line 1360, in _find_and_load
backend-1 | File "", line 1331, in _find_and_load_unlocked
backend-1 | File "", line 935, in _load_unlocked
backend-1 | File "", line 999, in exec_module
backend-1 | File "", line 488, in _call_with_frames_removed
backend-1 | File "/app/app/main.py", line 293, in
backend-1 | from app.api.wecom import router as wecom_router
backend-1 | File "/app/app/api/wecom.py", line 35, in
backend-1 | from app.services.auth_provider import auth_provider_registry
backend-1 | ImportError: cannot import name 'auth_provider_registry' from 'app.services.auth_provider' (/app/app/services/auth_provider.py)
backend-1 exited with code 0
backend-1 | [entrypoint] Tables created/verified
backend-1 | [entrypoint] Column patches applied
backend-1 | [entrypoint] Step 2: Running alembic migrations...

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions