在 .gitlab-ci.yml 中运行 docker-compose build

新手上路,请多包涵

我有一个 .gitlab-ci.yml 文件,其中包含以下内容:

 image: docker:latest

services:
  - docker:dind

before_script:
  - docker info
  - docker-compose --version

buildJob:
  stage: build
  tags:
    - docker
  script:
    - docker-compose build

但在 ci-log 我收到消息:

 $ docker-compose --version
/bin/sh: eval: line 46: docker-compose: not found

我究竟做错了什么?

原文由 jonua 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

编辑 我添加了另一个答案,为支持 docker-compose 的 .gitlab-ci.yml 配置提供了一个最小示例。


docker-compose 可以作为 Python 包安装,该包不随您的图像一起提供。您选择的图像甚至没有提供 Python 的安装:

 $ docker run --rm -it docker sh
/ # find / -iname "python"
/ #

寻找 Python 会给出一个空的结果。所以你必须选择一个不同的图像,它适合你的需要,最好安装 docker-compose 或者你自己创建一个。

您选择的 docker 映像使用 Alpine Linux。如果您不熟悉 Alpine Linux,您可以将其用作您自己的镜像的基础,或者先尝试其他镜像。

我遇到了同样的问题,并在公共 GitHub 存储库中创建了一个 Dockerfile,并将其与我的 Docker Hub 帐户连接,并选择了一个自动构建来在每次推送到 GitHub 存储库时构建我的图像。然后,您可以使用 GitLab CI 轻松访问自己的图像。

原文由 n2o 发布,翻译遵循 CC BY-SA 3.0 许可协议

Docker还提供了 官方 镜像: docker/compose

如果您不想在每条管道上都安装它,这是理想的解决方案。

请注意,在最新版本的 GitLab CI/Docker 中,您可能需要授予对 GitLab CI Runner 的特权访问权限并配置/禁用 TLS。请参阅 将 docker-in-docker 工作流与 Docker 执行程序一起使用

variables:
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2

# Official docker compose image.
image:
  name: docker/compose:latest

services:
  - docker:dind

before_script:
  - docker version
  - docker-compose version

build:
  stage: build
  script:
    - docker-compose down
    - docker-compose build
    - docker-compose up tester-image


请注意,在 docker-compose 早于 1.25 的版本中:

由于图像使用 docker-compose-entrypoint.sh 作为入口点,您需要在 --- 中将其 覆盖/bin/sh -c .gitlab-ci.yml 。否则,您的管道将因 No such command: sh 而失败

    image:
      name: docker/compose:latest
      entrypoint: ["/bin/sh", "-c"]

原文由 webmaster777 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题