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

CircleCI本地运行报错:多容器出现invalid UTS mode错误

问题描述

尝试通过CircleCI本地执行排查测试用例失败,持续报错:

Error starting container <container>: Error response from daemon: invalid UTS mode: container....

该错误出现在elasticsearch:5.4.3、postgres等多个容器上。执行命令为circleci local execute build,环境版本如下:

  • CircleCi版本:0.1.23845+f59d90e (release)
  • Docker版本23.0.1, build a5ee5b1
  • docker-compose版本1.29.2
  • ubuntu 20.04

使用的config.yml配置如下:

version: 2

jobs:
  build:
    docker:
      - image: 722c/circle-ci-ubuntu-python-3:18.04-Node-10
        environment:
          - DJANGO_SETTINGS_MODULE=config.settings.testing
          - DATABASE_URL=postgres://saleor:saleor@db/saleor
          - DJANGO_DEFAULT_FROM_EMAIL=noreply@example.com
          - BOOK_SERVER_URL="test"
          - BOOK_SERVER_TOKEN="test"
      - image: postgres
        name: db
        environment:
          - POSTGRES_USER=saleor
          - POSTGRES_PASSWORD=saleor
      - image: elasticsearch:5.4.3
        name: search
        environment:
          - 'ES_JAVA_OPTS=-Xms512m -Xmx512m'

    working_directory: /app

    steps:
      - checkout

      # Dependencies
      #   This would typically go in either a build or a build-and-test job when using workflows
      # Restore the dependency cache
      - restore_cache:            
      - run:
          name: Git submodules Sync
          command: git submodule sync

      - run:
          name: Git submodules update
          command: git submodule update --init

      - run:
          name: Install Python dependencies
          command: pip3 install -r requirements.txt

      - run:
          name: Install Node dependencies
          command: npm install

          # Save dependency cache
      - save_cache:
          key: v2-dep-{{ .Branch }}-{{ epoch }}
          paths:
            - ./node_modules
            - /root/.cache

      - run:
          name: Build the related files
          command: npm run build-emails && npm run build-assets --production

      - run:
          name: Run tests
          command: pytest

疑问:

  1. config.yml是否存在遗漏配置?
  2. 该错误具体含义是什么?UTS mode是什么?为何无效?
  3. 已确认内核中UTS namespace已启用,求排查思路或建议。

解答

错误含义与UTS Mode解释

  • 错误本质:Docker daemon无法识别CircleCI本地执行时传递的UTS模式参数,导致容器启动失败。
  • UTS Mode定义:UTS是Linux命名空间的一种,用于隔离主机名和域名。Docker中常见的UTS模式有两种:
    • host:容器共享宿主机的UTS命名空间,即容器与宿主机使用相同主机名
    • private:容器使用独立的UTS命名空间,为默认值
      而container:<容器ID/名称>模式让当前容器共享另一个容器的UTS命名空间,但你的环境中CircleCI本地客户端与Docker版本的兼容性问题导致该模式无法被识别。

config.yml配置检查

你的config.yml无明显语法错误,但有两处细节需要完善:

  • restore_cache步骤缺少keys配置,应指定缓存匹配规则,示例:
    - restore_cache:
        keys:
          - v2-dep-{{ .Branch }}-{{ epoch }}
          - v2-dep-{{ .Branch }}-
          - v2-dep-
    
  • 环境变量中的引号可移除(如BOOK_SERVER_URL="test"改为BOOK_SERVER_URL=test),避免潜在解析问题,但这不是当前错误的诱因。

排查思路与解决建议

核心原因:版本兼容性冲突

CircleCI本地客户端(0.1.23845)版本较旧,而Docker 23.0.1属于新版本,两者在UTS模式参数传递上存在兼容性问题——旧版CircleCI可能使用了Docker已废弃或修改的语法。

具体解决步骤

  1. 降级Docker版本:将Docker降级至20.10.x或21.x系列,旧版CircleCI本地客户端对这些版本的兼容性更好。
  2. 升级CircleCI本地客户端:若不想降级Docker,尝试升级CircleCI本地客户端到最新版本,新版本通常会修复与高版本Docker的兼容问题。
  3. 绕过CircleCI本地执行:直接用Docker Compose手动搭建测试环境,模拟CircleCI的容器配置执行测试。示例docker-compose.yml:
    version: '3'
    services:
      app:
        image: 722c/circle-ci-ubuntu-python-3:18.04-Node-10
        environment:
          DJANGO_SETTINGS_MODULE: config.settings.testing
          DATABASE_URL: postgres://saleor:saleor@db/saleor
          DJANGO_DEFAULT_FROM_EMAIL: noreply@example.com
          BOOK_SERVER_URL: test
          BOOK_SERVER_TOKEN: test
        working_dir: /app
        volumes:
          - ./:/app
        command: bash -c "git submodule sync && git submodule update --init && pip3 install -r requirements.txt && npm install && npm run build-emails && npm run build-assets --production && pytest"
      db:
        image: postgres
        environment:
          POSTGRES_USER: saleor
          POSTGRES_PASSWORD: saleor
      search:
        image: elasticsearch:5.4.3
        environment:
          ES_JAVA_OPTS: "-Xms512m -Xmx512m"
    
    执行docker-compose up即可运行测试。

额外排查点

  • 检查Docker daemon配置文件/etc/docker/daemon.json,若有自定义UTS相关配置,暂时注释后重启Docker daemon重试。
  • 确认执行circleci local execute的用户拥有Docker操作权限,必要时可临时加sudo执行(不推荐长期使用)。

内容的提问来源于stack exchange,提问作者Trax Bagley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:34:57