从docker容器运行docker compose

从docker容器运行docker compose,docker,jenkins,docker-compose,Docker,Jenkins,Docker Compose,我让Jenkins在Docker容器中运行,并安装了Docker.sock。我可以从此容器调用docker compose,在主机上运行服务吗?我尝试从容器中执行安装脚本,但它一直在说 “没有这样的文件或目录” 这是可以实现的,但要做到正确却很难 您需要使用docker卷将docker-compose.yml文件在docker主机上的路径装载到容器中的同一位置 因此,如果docker-compose.yml文件位置是docker主机上的/home/leonid/workspace/project

我让
Jenkins
Docker
容器中运行,并安装了
Docker.sock
。我可以从此容器调用
docker compose
,在主机上运行服务吗?我尝试从容器中执行安装脚本,但它一直在说

“没有这样的文件或目录”


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

您需要使用docker卷将docker-compose.yml文件在docker主机上的路径装载到容器中的同一位置

因此,如果docker-compose.yml文件位置是docker主机上的
/home/leonid/workspace/project1/docker compose.yml
,则需要为jenkins容器添加卷
-v/home/leonid/workspace/project1/:/home/leonid/workspace/project1/

然后,在詹金斯的工作中:

cd/home/leonid/workspace/project1/
docker compose up-d
这是为什么?


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

这是可以实现的,但要想正确实现它很困难

您需要使用docker卷将docker-compose.yml文件在docker主机上的路径装载到容器中的同一位置

因此,如果docker-compose.yml文件位置是docker主机上的
/home/leonid/workspace/project1/docker compose.yml
,则需要为jenkins容器添加卷
-v/home/leonid/workspace/project1/:/home/leonid/workspace/project1/

然后,在詹金斯的工作中:

cd/home/leonid/workspace/project1/
docker compose up-d
这是为什么?


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

根据用于生成的映像创建自己的docker文件(可能是docker:latest)

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

启动jenkins代理,从您的映像而不是默认映像构建

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

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


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

根据您用于构建的映像创建您自己的docker文件(可能是docker:latest)

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

启动jenkins代理,从您的映像而不是默认映像构建

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

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

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

文档中的“作为容器安装”部分对我很有用:

文档中的“作为容器安装”部分对我很有用:


我想我还不够清楚,获取docker compose.yml不是问题,因为它是从git获取的,问题是容器中不存在实际的
docker compose
二进制文件,我不确定如何从withinSo开始工作,您不确定如何安装它?我想是的,我试图用
docker exec
安装它,但没有取得任何成功。我想我还不够清楚,获取
docker compose。yml
不是问题,因为它是从git获取的,问题是容器中不存在实际的
docker compose
二进制文件,我不确定如何从withinSo开始工作,您不确定如何安装它?我想是的,我尝试用
docker exec
安装它没有成功。您在jenkins容器中使用的docker映像是什么?它应该在itI中安装docker compose I use the Blue Ocean Latest您可以发布用于构建的jenkins文件吗?您在jenkins容器中使用的docker映像是什么?它应该在itI中安装docker compose I use the Blue Ocean Latest您可以发布用于构建的Jenkins文件吗?它是否与
docker exec
相同?Jenkins是否在主映像上为每个构建运行或构建创建新容器?如果是这样,您将没有时间使用docker exec进行安装,因为容器仅在生成期间存在。这是否与
docker exec
相同?Jenkins是否正在为主映像上的每个生成运行或生成创建新容器?如果是这样,您将没有时间使用docker exec进行安装,因为容器仅在构建期间存在。
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
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