首页 > 解决方案 > Gitlab CI runner 在 docker-compose 构建时失败

问题描述

我的想法是拥有一个 docker-compose 文件,我可以--profile db_as_container根据我想要拥有云数据库(MongoDB atlas)还是本地数据库作为容器来配置它。

这是我的 docker-compose.yml:

version: '3'

services:
    app:
        image: '${APP_NAME}:${TAG:-latest}'
        build: .
        ports:
            - '${PORT}:${PORT}'

    mongo_db:
        image: mongo
        container_name: mongo_db_container
        ports:
            - "27017:27017"
        profiles:
            - db_as_container

我的 docker compose up shell 脚本(dc-up.sh)推断我的 DB_CONNECTION_STRING 是云类型还是本地容器类型,并调用适当的 up 命令。

TAG=${TAG} docker-compose --profile db_as_container up -d --build

对比

TAG=${TAG} docker-compose up -d --build

本地有效,并且不会抱怨使用配置文件。

问题是当我的Gitlab CI运行器运行我的构建脚本(build-and-push.sh)时:

TAG=${TAG} docker-compose build

它会产生此错误:

Compose 文件“./docker-compose.yml”无效,因为:services.mongo_db 的配置选项不受支持:“profiles”

我在这里做错了什么?

标签: dockerdocker-composegitlab-ci

解决方案


实际上问题不是撰写文件规范的版本,而是我在这里发现的 docker-compose 本身

在 docker-compose 1.28 版中添加了对服务配置文件的支持

从 1.262 更新到1.28.6解决了我的问题。


推荐阅读