在.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 

我究竟做错了什么?

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


docker-compose可以作为一个Python软件包安装,这个软件包不随图像一起提供。 您select的图像甚至不提供Python的安装:

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

寻找Python给出了一个空的结果。 所以你必须select一个不同的图像,这符合你的需求,理想的情况下有docker-compose或者你创build一个。

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

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

我创build了一个简单的docker集装箱, docker-compose安装在docker:latest 。 请参阅https://hub.docker.com/r/tmaier/docker-compose/

你的.gitlab-ci.yml文件看起来像这样:

 image: tmaier/docker-compose:latest services: - docker:dind before_script: - docker info - docker-compose --version buildJob: stage: build tags: - docker script: - docker-compose build 

如果您不想提供预装docker-compose的自定义docker镜像,则可以在构build时通过安装Python来使其工作。 安装Python后,您可以最终安装docker-compose准备好旋转容器。

 image: docker:latest services: - docker:dind before_script: - apk add --update python py-pip python-dev && pip install docker-compose # install docker-compose - docker version - docker-compose version test: cache: paths: - vendor/ script: - docker-compose up -d - docker-compose exec -T php-fpm composer install --prefer-dist - docker-compose exec -T php-fpm vendor/bin/phpunit --coverage-text --colors=never --whitelist src/ tests/ 

如果您收到此错误或类似错误,请将docker-compose exec-T一起使用:

 $ docker-compose exec php-fpm composer install --prefer-dist Traceback (most recent call last): File "/usr/bin/docker-compose", line 9, in <module> load_entry_point('docker-compose==1.8.1', 'console_scripts', 'docker-compose')() File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 62, in main command() File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 114, in perform_command handler(command, command_options) File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 442, in exec_command pty.start() File "/usr/lib/python2.7/site-packages/dockerpty/pty.py", line 338, in start io.set_blocking(pump, flag) File "/usr/lib/python2.7/site-packages/dockerpty/io.py", line 32, in set_blocking old_flag = fcntl.fcntl(fd, fcntl.F_GETFL) ValueError: file descriptor cannot be a negative integer (-1) ERROR: Build failed: exit code 1 

@ tmaier的解决scheme依赖于第三方的形象,我不太喜欢这个。 您只需要安装两个软件包即可使用docker-compose获取自己的和始终最新的dindconfiguration:

 # .gitlab-ci.yml image: docker services: - docker:dind build: script: - apk add --update py-pip # <-- - pip install docker-compose # <-- - docker-compose up -d