跨目录添加Docker Compose服务构建失败,请求排查错误原因
问题分析与修复方案
我看了你的配置,主要有两个关键问题导致构建失败:
1. 环境文件引用错误
你的asset_update_service配置里用了env_file: - .env,这会加载nft-trading-service目录下的.env文件,但你明确提到nft-asset-updater有自己的专属.env,所以这里应该指向正确的路径:../nft-asset-updater/.env。如果updater需要同时加载trading服务的.env和自身的.env,可以把两个路径都列出来;如果只需要自身的,单独写这个路径即可。
2. Dockerfile路径配置错误
在build部分你写了dockerfile: .,这是不正确的。dockerfile参数需要指定具体的文件名(默认是Dockerfile),而不是目录。你已经把context设为../nft-asset-updater(这个是对的,指向updater的目录),所以如果你的Dockerfile就叫Dockerfile,可以直接省略dockerfile参数;如果是自定义名称,再指定具体文件名。
另外还有个小细节:pgadmin服务里的links在Compose v3中已经被废弃,建议用networks来实现服务间通信,所以可以删掉这个配置项。
修正后的docker-compose.yml配置
version: "3" services: nftapi: env_file: - .env build: context: . ports: - '5000:5000' depends_on: - postgres networks: - postgres extra_hosts: - "host.docker.internal:host-gateway" restart: always asset_update_service: # 加载updater专属的环境变量文件 env_file: - ../nft-asset-updater/.env build: context: ../nft-asset-updater # 如果Dockerfile是默认名称,可省略此行;自定义名称则替换为实际文件名 # dockerfile: Dockerfile ports: - '9000:9000' depends_on: - postgres networks: - postgres extra_hosts: - "host.docker.internal:host-gateway" restart: always postgres: container_name: postgres image: postgres:latest ports: - "5432:5432" volumes: - /data/postgres:/var/lib/postgresql/data env_file: - docker.env networks: - postgres pgadmin: container_name: pgadmin image: dpage/pgadmin4 ports: - "8080:80" env_file: - docker.env networks: - postgres networks: postgres: driver: bridge
额外注意事项
- 执行
docker-compose up --build时,确保你是在root/nft-trading-service目录下运行命令,这样../nft-asset-updater的路径才会被正确解析。 - 检查nft-asset-updater目录下的Dockerfile是否存在,并且语法正确(比如有没有指定基础镜像、正确的构建步骤等)。
- 如果构建时出现权限问题,可以尝试给nft-asset-updater目录设置适当的权限,或者在Dockerfile中使用非root用户进行构建。
内容的提问来源于stack exchange,提问作者BitQueen
相关产品推荐
相关产品推荐

