[英]How to run Docker and Docker-Compose from a Dockerized Jenkins container?
[英]Run docker-compose from Docker container
我让Jenkins
在安装了docker.sock
的Docker
容器内运行。 我可以从这个容器调用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.