如何在 gitlab-runner 容器内运行的 docker 中的 docker 中运行 docker-compose?

Cor*_*ool 12 docker gitlab-ci-runner docker-compose

我在 docker 容器中有一个 gitlab runner,如果我运行像 nginx 这样的图像,运行良好。但是现在我尝试在 gitlab runner 中的 docker (dind) 中运行 docker,我想在 dind 中运行 docker-compose。Docker 信息运行良好,但如果我尝试运行 docker-compose,我会收到一个权限被拒绝的错误。

我将 /usr/local/bin/docker-compose 文件链接到 gitlab runner 容器,并将其输入到 runner config.toml 文件的卷参数中。

如果我尝试运行 sudo,它会以未知的命令错误结束,因此这不是解决方案。

我是否必须更多地链接一些文件,还是链接到许多嵌套容器?

Yuc*_*uci 18

为了有docker-compose,你需要安装它的图像泊坞窗,这在写作的时候是18.09.6版本,构建481bc77。

docker-compose 版本 1.24.0 开始,您还需要以下依赖项才能将docker -compose安装在 alpine 上

apk add py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make
Run Code Online (Sandbox Code Playgroud)

这是一个示例.gitlab-ci.yml

image: docker:stable

stages:
    - deploy

services:
  - docker:dind

before_script:
  - apk update
  - apk add py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make
  - pip install docker-compose

deploy_app:
    stage: deploy
    script:
        - docker-compose down
        - docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

  • @gtxbxakgcanmt9d9 SO 的哲学是展示,而不是讲述。一个例子就太好了:-) (4认同)

Maz*_*Tov 5

如果您使用的是 dind,则意味着 docker 工作正常,现在您只需要安装 docker-compose 这只是简单的 python 包,您可以在 before_script 中完成

.gitlab-ci.yml

image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay2

stages:
- test

before_script:
  - apk add --no-cache py-pip
  - pip install docker-compose
  - docker info
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN docker.registry.com

test:
  stage: test
  script:

    - cp .env.sample .env # copy environement variable
    - docker-compose up -d
    # run some test here
Run Code Online (Sandbox Code Playgroud)

  • 命令 `pip install docker-compose` 抛出 `error: command 'gcc' failed with exit status 1` (6认同)