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
相关产品推荐
相关产品推荐

