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

WSL Ubuntu下docker-compose up报Resource ID ERROR的解决求助

问题:WSL Ubuntu中执行docker-compose up报错docker.errors.NullResource: Resource ID was not provided

执行docker-compose up时出现以下错误:

Traceback (most recent call last):
  File "/home/garvit/.local/bin/docker-compose", line 8, in <module>
    sys.exit(main())
  File "/home/garvit/.local/lib/python3.10/site-packages/compose/cli/main.py", line 81, in main
    command_func()
  File "/home/garvit/.local/lib/python3.10/site-packages/compose/cli/main.py", line 203, in perform_command
    handler(command, command_options)
  File "/home/garvit/.local/lib/python3.10/site-packages/compose/metrics/decorator.py", line 18, in wrapper
    result = fn(*args, **kwargs)
  File "/home/garvit/.local/lib/python3.10/site-packages/compose/cli/main.py", line 1186, in up
    to_attach = up(False)
  File "/home/garvit/.local/lib/python3.10/site-packages/compose/cli/main.py", line 1166, in up
    return self.project.up(
  File "/home/garvit/.local/lib/python3.10/site-packages/compose/project.py", line 664, in up
    svc.ensure_image_exists(do_build=do_build, silent=silent, cli=cli)
  File "/home/garvit/.local/lib/python3.10/site-packages/compose/service.py", line 352, in ensure_image_exists
    self.image()
  File "/home/garvit/.local/lib/python3.10/site-packages/compose/service.py", line 378, in image
    return self.client.inspect_image(self.image_name)
  File "/home/garvit/.local/lib/python3.10/site-packages/docker/utils/decorators.py", line 16, in wrapped
    raise errors.NullResource(
docker.errors.NullResource: Resource ID was not provided

使用的docker-compose.yml配置如下:

version: "3"

services:
#  broker:
#    container_name: broker
#    env_file:
#      - .env
#    networks:
#      - broker
#    image: "docker.io/bitnami/rabbitmq:latest"
#    environment:
#      - RABBITMQ_PASSWORD=${BROKER_PASSWORD}
#      - RABBITMQ_USERNAME=${PROD}
#    ports:
#      - "4369:4369"
#      - "5672:5672"
#      - "25672:25672"
#      - "15672:15672"
#    volumes:
#      - "pdf_broker_data:/bitnami"

  web:
    build: ./src
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./src/:/usr/src/app/
    ports:
      - 8000:8000
    env_file:
      - .env.sample
    depends_on:
      - db

  db:
    image: postgres:14-alpine
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=${DB_USERNAME}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=${DB_NAME}
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - ./pgdata:/var/lib/postgresql/data/pgdata

  graphql-engine:
    image: ${HASURA_VERSION}
    ports:
      - "5001:8080"
    depends_on:
      - db
    restart: always
    environment:
      HASURA_GRAPHQL_DATABASE_URL: postgres://${DB_USERNAME}:${DB_PASSWORD}@db:5432/${DB_NAME}
      HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console
      HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
      HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_ADMIN_PASS}

#  webserver:
#    build: .
#    # image: mpc-etl:latest
#    restart: always
#    env_file:
#      - pdf/.env
#    depends_on:
#      - db
#    volumes:
#      - ./logs:/srv/logs/
#    ports:
#      - "8080:8080"
#    command: gunicorn --workers=2 -b 0.0.0.0:8080 app:api
#    healthcheck:
#      test: ["CMD", "curl", "-f", "http://webserver:8080"]
#      interval: 2s
#      timeout: 2s
#      retries: 5
#
#  worker:
#    build: .
#    # image: mpc-etl:latest
#    restart: always
#    env_file:
#      - pdf/.env
#    depends_on:
#      - db
#      - broker
#    volumes:
#      - ./logs:/srv/logs/
#    command: celery worker -A app.celery --loglevel=info

#volumes:
#  pdf_broker_data:
#    driver: local

#networks:
#  broker:
#    driver: bridge

已尝试过卸载重装所有Docker包、执行docker-compose --build,问题仍未解决。

解决方案

这个错误的核心原因是Docker Compose无法获取有效的镜像ID,大概率是graphql-engine服务的${HASURA_VERSION}环境变量为空或未正确加载导致的,按以下步骤排查修复:

  • 检查环境变量是否正确设置

    1. 在终端执行echo ${HASURA_VERSION},确认输出是否为有效的Hasura镜像标签(比如hasura/graphql-engine:latest或具体版本号)。
    2. 如果输出为空,打开.env.sample文件,添加HASURA_VERSION=hasura/graphql-engine:latest(或指定你需要的版本)。
  • 确保graphql-engine服务加载正确的环境文件
    当前graphql-engine服务未指定env_file,默认只会加载当前目录的.env文件,而你的web服务用的是.env.sample。给graphql-engine添加env_file配置:

    graphql-engine:
      image: ${HASURA_VERSION}
      env_file:
        - .env.sample
      # 其他配置保持不变
    
  • 手动拉取镜像验证
    执行docker pull ${HASURA_VERSION},如果命令成功,说明镜像可正常获取;如果失败,检查变量值是否正确。

  • 清理缓存后重新构建

    1. 执行docker-compose down -v彻底停止并清理容器、卷。
    2. 执行docker system prune -af清理无用的镜像、容器和缓存。
    3. 重新执行docker-compose up --build启动服务。

内容的提问来源于stack exchange,提问作者Garvit Singhal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:02:54