在Docker GitLab CI多任务执行器上运行docker-compose

11

我有一个在Docker上使用docker-compose作为开发环境的项目。

我希望在GitLabCI上使用gitlab-ci-multi-runner“ Docker mode”实例来运行它。

这是我的.gitlab-ci.yml文件:

image: soullivaneuh/docker-bash

before_script:
  - apk add --update bash curl
  - curl --silent --location https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  - chmod +x /usr/local/bin/docker-compose
  - ./configure
  - docker-compose up -d
请注意,soullivaneuh/docker-bash镜像只是一个安装有bash的docker镜像。
该脚本在docker-compose up -d命令上失败。
gitlab-ci-multi-runner 0.7.2 (998cf5d)
Using Docker executor with image soullivaneuh/docker-bash ...
Pulling docker image soullivaneuh/docker-bash:latest ...

Running on runner-1ee5079f-project-3-concurrent-1 via sd-59984...
Fetching changes...
Removing app/config/parameters.yml
Removing docker-compose.env
HEAD is now at 5c5e7ff remove docker service
From https://git.dummy.net/project/project
   5c5e7ff..45e643d  docker-ci  -> origin/docker-ci
Checking out 45e643dd as docker-ci...
Previous HEAD position was 5c5e7ff... remove docker service
HEAD is now at 45e643d... Remove docker info commands

$ apk add --update bash curl
fetch http://dl-4.alpinelinux.org/alpine/v3.2/main/x86_64/APKINDEX.tar.gz
OK: 10 MiB in 28 packages
$ curl --silent --location https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ ./configure
$ docker-compose up -d
bash: line 30: /usr/local/bin/docker-compose: No such file or directory

ERROR: Build failed with: exit code 1

我完全不知道这个为什么失败。

谢谢您的帮助。


1
我发布问题后10分钟在这里看到了您的问题,寻找相同的答案。令人惊奇。 - Mike Atlas
1个回答

3
< p > “No such file or directory” 是具有误导性的。我在尝试使用 alpine linux 运行动态链接二进制文件时(似乎您正在使用此操作系统),已经多次收到此消息。

问题(据我所知)是该二进制文件是使用 glibc 编译和链接的,但 alpine 使用 musl 而不是 glibc。

您可以使用 ldd /usr/local/bin/docker-compose 命令来查看缺少哪些库(如果所有其他方法都失败,则可以使用 strace 命令)。

为了让其正常工作,可能更容易从 python 源代码中安装(https://docs.docker.com/compose/install/#install-using-pip),这也是官方 compose 镜像所采用的方法(https://github.com/docker/compose/blob/master/Dockerfile.run)。

或者您可以使用基于 debian 或其他使用 glibc 的发行版构建的镜像。


我想使用基于Debian的镜像,但它是Docker官方镜像。我不想创建自己的镜像。我会尝试你的其他解决方案。 - Soullivaneuh
ldd 命令给了我这个:https://gist.github.com/Soullivaneuh/3cee5f17166c856a01fc 我不确定结果和该怎么做。 - Soullivaneuh
然后是strace结果:https://gist.github.com/Soullivaneuh/79b09f030965b2e41305 不是非常详细。 - Soullivaneuh
最终 pip 的方式可行了。现在我有另一个问题,但我想这应该是另一个问题了。 - Soullivaneuh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接