繁体   English   中英

从 Docker 容器运行 docker-compose

[英]Run docker-compose from Docker container

我让Jenkins在安装了docker.sockDocker容器内运行。 我可以从这个容器调用docker-compose来在主机上运行服务吗? 我尝试从容器内执行安装脚本,但它一直说

“没有相应的文件和目录”。

docker exec jenkins curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

docker exec jenkins chmod +x /usr/local/bin/docker-compose

这是可以实现的,但很难做到正确。

您需要使用 docker将 docker-compose.yml 文件在您的 docker 主机上的路径挂载到容器中完全相同的位置。

所以如果docker-compose.yml文件位置是/home/leonid/workspace/project1/docker-compose.yml主机上的/home/leonid/workspace/project1/docker-compose.yml ,则需要添加volume -v /home/leonid/workspace/project1/:/home/leonid/workspace/project1/用于 jenkins 容器。

然后,在您的 Jenkins 工作中:

cd /home/leonid/workspace/project1/
docker-compose up -d

这是为什么?

请记住,docker-compose 向 docker 引擎提供指令。 docker 引擎在 docker 主机上运行(而不是在 Jenkins 容器中)。 因此 docker-compose 提供给 docker 引擎的任何路径都必须存在于 docker 主机上。

根据用于构建的图像创建自己的 dockerfile(可能是 docker:latest)

然后,在 RUN 行中下载 docker-compose 并将其设置为可执行文件。

启动 jenkins 代理以从您的图像构建而不是默认一个。

您需要在该构建容器上安装 docker-compose,而不是在 jenkins master 上。

对于 gitlab-ci 中的构建,我有一个特殊的构建容器,它基于 docker 镜像并另外安装了 compose。 我认为这是你的情况 - 你正在使用 jenkins 来旋转基于 docker:latest 的容器,默认情况下它没有 docker-compose。 您需要创建自己的来自 docker:latest 的图像,安装 compose 或使用来自 docekrhub 的一些图像,就像这样完成。

此外,您可以尝试将 compose 作为构建的一部分进行安装。 只需将它下载到某个本地目录并从那里使用它。

文档中的“作为容器安装”部分对我有用: https : //docs.docker.com/compose/install/

sudo curl -L --fail https://github.com/docker/compose/releases/download/1.25.0/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM