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

GCP Compute Engine中Docker Compose启动报错:app依赖未定义服务db

解决Docker Compose部署时依赖服务未定义的报错

我基于Gin框架开发了Go服务器,计划部署至GCP Compute Engine虚拟机。本地执行docker compose up -d可正常运行,但在虚拟机终端执行该命令时出现报错:

service "app" depends on undefined service db: invalid compose project

我的docker-compose.yml代码:

version: "3.7"

services:
  database:
    container_name: mywealth-database
    image: postgres:12.8
    restart: always
    environment:
      - POSTGRES_USER=sharauq
      - POSTGRES_PASSWORD=sharauq
      - POSTGRES_DB=mywealth
    ports:
      - 5432:5432
    volumes:
      - db:/var/lib/postgresql/data
  app:
        container_name: app
        restart: always
        build: .
        ports:
            - "8080:8080"
        depends_on: 
            - db

volumes:
  db:

我的Dockerfile代码:

# Start from the latest golang base image.
FROM golang:latest

# Add maintainer information
LABEL maintainer="sharaukadr2001@gmail.com"

# Set the current working directory inside an image.
WORKDIR /app

# Copy Go module dependency requirements file.
COPY go.mod .

# Copy Go Modules expected hashes file.
COPY go.sum .

# Download dependencies.
RUN go mod download

# Copy all sources.
COPY . .

# Build the application.
RUN go build -o /mywealth

# Delete source files.
RUN find . -name "*.go" -type f -delete

# Run the application.
CMD ["/mywealth"]

问题原因与解决办法

报错核心是服务名称不匹配:你在services下定义的数据库服务名为database,但app服务的depends_on字段里写的是db,Docker Compose找不到名为db的服务,因此抛出报错。

可通过以下两种方式修正:

方式一:修改app的依赖服务名称为database

调整docker-compose.yml中app部分的depends_on:

version: "3.7"

services:
  database:
    container_name: mywealth-database
    image: postgres:12.8
    restart: always
    environment:
      - POSTGRES_USER=sharauq
      - POSTGRES_PASSWORD=sharauq
      - POSTGRES_DB=mywealth
    ports:
      - 5432:5432
    volumes:
      - db:/var/lib/postgresql/data
  app:
    container_name: app
    restart: always
    build: .
    ports:
      - "8080:8080"
    depends_on: 
      - database  # 修正为实际服务名database

volumes:
  db:

方式二:修改数据库服务的名称为db

调整services下的数据库服务名:

version: "3.7"

services:
  db:  # 将服务名从database改为db
    container_name: mywealth-database
    image: postgres:12.8
    restart: always
    environment:
      - POSTGRES_USER=sharauq
      - POSTGRES_PASSWORD=sharauq
      - POSTGRES_DB=mywealth
    ports:
      - 5432:5432
    volumes:
      - db:/var/lib/postgresql/data
  app:
    container_name: app
    restart: always
    build: .
    ports:
      - "8080:8080"
    depends_on: 
      - db

volumes:
  db:

修改完成后,重新在虚拟机执行docker compose up -d即可正常部署。

内容的提问来源于stack exchange,提问作者Kadirbek Sharau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:35:20