我的泊塢窗容器和環境變量遇到了一些問題。將Docker部署到遠程主機時傳遞環境變量
目前我有一個搬運工-compose.yml與以下定義:
version: '2.1'
services:
some-service:
build:
context: .
image: image/replacedvalues
ports:
- 8080
environment:
- PROFILE=acc
- ENVA
- ENVB
- TZ=Europe/Berlin
some-service-acc:
extends:
service: some-service
environment:
- SERVICE_NAME=some-service-acc
現在,當我手動部署此(通過SSH命令直接線)在服務器A上,將採取的環境變量從服務器A並將它們放入我的容器中。因此,我的容器中的主機的值爲ENVA
和ENVB
。使用以下命令(在建立課程圖像之後):docker-compose up some-service-acc
。
我們目前正在開發更好的基礎架構,並希望通過Jenkins部署服務。 Jenkins已啓動並運行在服務器B上的泊塢窗容器中。
我可以通過Jenkins(Job-DSL,設置DOCKER_HOST =「tcp:// serverA:2375」臨時)部署服務。因此,它將在服務器B上的Jenkins容器上運行ServerA上的所有docker(組合)命令。該服務已啓動並正在運行,但它沒有ENVA
和ENVB
的值。
詹金斯運行與作業-DSL Groovy腳本如下:
withEnv(["DOCKER_HOST=tcp://serverA:2375"]) {
sh "docker-compose pull some-service-acc"
sh "docker-compose -p some-service-acc up -d some-service-acc"
}
我想在我的詹金斯容器和服務器B本身,但既不工作設置它們。只有當我直接在服務器A上手動部署時,它纔有效。
當我使用泊塢窗檢查檢查正在運行的容器中,我得到了env
塊以下的輸出:
"Env": [
"PROFILE=acc",
"affinity:container==JADFG09gtq340iggIN0jg53ij0gokngfs",
"TZ=Europe/Berlin",
"SERVICE_NAME=some-service-acc",
"ENVA",
"ENVB",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=C.UTF-8",
"JAVA_VERSION=8",
"JAVA_UPDATE=121",
"JAVA_BUILD=13",
"JAVA_PATH=e9e7ea248e2c4826b92b3f075a80e441",
"JAVA_HOME=/usr/lib/jvm/default-jvm",
"JAVA_OPTS="
]
我在哪裏需要設置環境變量,以便它們將被傳遞到容器?我更喜歡將變量存儲在服務器A上。但如果這是不可能的,有人可以向我解釋它是如何實現的嗎?它是而不是的一個選項,用於硬編碼撰寫文件或源文件中任何其他位置的值,因爲它們包含敏感數據。
如果我在錯誤的地方問這個問題,請將我重定向到我應該在的地方。
謝謝!
硬編碼不是我的選擇,因爲它包含敏感數據,我也不需要每個部署的環境變量,只有部署到ServerA的服務。但是,如果我得到它的權利,除'DOCKER-HOST'之外的'docker-compose'命令時沒有其他環境變量? – Clemenz
DOCKER_HOST,一個最小的PATH,以及由Jenkins定義的各種變量。還有其他選擇的祕密,我會更新我的答案。 – BMitch
感謝您的廣泛答覆。我會接受它作爲正確的答案。有很多東西需要研究。感謝所有的信息。 – Clemenz