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}环境变量为空或未正确加载导致的,按以下步骤排查修复:
检查环境变量是否正确设置
- 在终端执行
echo ${HASURA_VERSION},确认输出是否为有效的Hasura镜像标签(比如hasura/graphql-engine:latest或具体版本号)。 - 如果输出为空,打开
.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},如果命令成功,说明镜像可正常获取;如果失败,检查变量值是否正确。清理缓存后重新构建
- 执行
docker-compose down -v彻底停止并清理容器、卷。 - 执行
docker system prune -af清理无用的镜像、容器和缓存。 - 重新执行
docker-compose up --build启动服务。
- 执行
内容的提问来源于stack exchange,提问作者Garvit Singhal
相关产品推荐
相关产品推荐

