Monorepo架构下多Python微服务交替构建失败的问题排查与解决求助
我目前在维护一个基于Monorepo架构的多Python微服务项目,用Docker Compose + Poetry来做构建部署,但碰到了一个非常诡异的问题:第一次构建可能能成功,但第二次构建就会随机失败几个服务,再重试一次又会换成其他服务报错,就这样成功、失败交替循环,完全摸不准规律。
最近一次构建出现的错误示例如下:
CANCELED [billing-service internal] load build definition from Dockerfile 0.1s
=> CANCELED [document-service internal] load build definition from Dockerfile 0.1s
=> CANCELED [employee-service internal] load build definition from Dockerfile
=> ERROR [ai-agent-service builder 5/6] COPY pyproject.toml poetry.lock* ./ 0.0s
=> ERROR [analytics-service internal] load build context
最让我困惑的是,像ai-agent-service这类报错找不到pyproject.toml的服务,我明明在对应的Poetry项目目录下放了这个文件,但构建时就是读取不到;而且错误不是固定在某个服务上,每次失败的服务都不一样。
下面是我的相关配置信息,麻烦大家帮忙排查下问题:
docker-compose.yml中某一个服务的配置块
analytics-service: <<: *python-service build: context: . dockerfile: ./apps/cue_analytics_service/Dockerfile # 路径是从项目根目录到该服务Dockerfile的位置 ports: ["8102:8102"] depends_on: [config-server, db, kafka]
该服务对应的Dockerfile内容
FROM python:3.13-slim AS builder WORKDIR /opt/app RUN pip install --no-cache-dir poetry COPY pyproject.toml poetry.lock ./ RUN poetry config virtualenvs.in-project true && poetry install --no-root --no-dev FROM python:3.13-slim WORKDIR /opt/app RUN groupadd -r appgroup && useradd --no-log-init -r -g appgroup appuser COPY --from=builder /opt/app/.venv ./.venv COPY src/ . RUN chown -R appuser:appgroup /opt/app USER appuser ENV PATH="/opt/app/.venv/bin:$PATH" EXPOSE 8102 CMD ["uvicorn", "cue_analytics_service.main:app", "--host", "0.0.0.0", "--port", "8102"]
我想请教大家几个问题:
- 为什么会出现这种随机交替失败的情况?会不会是Monorepo下Docker构建的资源竞争或者上下文冲突?
- 明明
pyproject.toml就在对应服务的项目路径下,为什么Docker的COPY指令会找不到它? - 针对Monorepo架构下的多Python服务Docker构建,有没有什么配置上的最佳实践或者我遗漏的错误点?
内容来源于stack exchange

