簡體   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