[英]How to dynamically change the docker-compose image field
我有一個類似下面的 docker-compose.yml:
networks:
smstake:
ipam:
config:
- subnet: 10.0.10.0/24
services:
app:
image: smstake:latest
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
我正在使用它在以 swarm 模式運行的節點中部署服務。
每次構建圖像時,圖像名稱可能會根據用戶傳遞的分支名稱或用作圖像標記的標記名而有所不同。 我從詹金斯那里運行它。 例如: smstake:
如何將圖像名稱動態添加到服務的圖像參數中。 由於 docker stack 不支持構建。 我什至不能使用它。 我無法找出正確的方法來做到這一點。
我正在嘗試使用docker stack deploy -c docker-compose.yml stackname
進行部署
我的確切要求是:
為新標簽創建新映像的原因是我可以回滾到以前構建的映像。
一些編輯:添加圖像名稱以添加到 configuration.env 文件中,該文件將在部署命令運行之前使用部署作業中的 echo 命令傳遞。 比 docker-compose 看起來像下面
version: '3.4'
networks:
smstake:
services:
db:
image: mysql:5.7
networks:
- smstake
ports:
- "3306"
env_file:
- configuration.env
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
deploy:
mode: replicated
replicas: 1
app:
env_file:
- configuration.env
image: ${SMSTAKE_VERSION}
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
mysql_data:
為什么它沒有從 configuration.env 文件中讀取,我已經確認在那里設置了該鍵的正確值。 錯誤信息
創建服務 smstake_app 未能創建服務 smstake_app:來自守護進程的錯誤響應:rpc 錯誤:代碼 = InvalidArgument desc = ContainerSpec:必須提供圖像參考構建步驟“執行外殼”標記構建為失敗已完成:失敗
在 docker-compose 文件中,您可以根據環境變量進行變量替換。 這記錄在變量替換下。
您可以使用以下內容為圖像指定不同的版本:
image: smstake:${SMSTAKE_VERSION}
在部署的 jenkins 作業中,您可以設置此環境變量並運行 docker stack 命令:
SMSTAKE_VERSION=v1.2.0 docker stack deploy -c docker-compose.yml stackname
您需要分兩個階段進行
docker-compose config | docker stack deploy -c - stackname
您需要使用docker-compose
而不是docker compose
V2,因為docker stack
不支持無version
的清單(至少在撰寫本文時尚未發布的 21.xx 版本之前不支持)
您還可以獲得使用.env
文件來讀取您的環境的額外好處,這也使開發人員也很容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.