ドッカーのコンテナと環境変数に問題があります。ドッカーをリモートホストにデプロイするときに環境変数を渡す
現在、私は次のように定義してドッカ-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
私は、サーバーA上の(直接SSHコマンドラインを介して)これを手動で展開するときに今、それはサーバからの環境変数がかかります私のコンテナに入れてください。だから私はENVA
とENVB
私のコンテナのホストからの値を持っています。次のコマンドを使用して(コースの画像を構築した後):docker-compose up some-service-acc
。
私たちは現在、より良いインフラストラクチャを開発しており、Jenkins経由でサービスを展開したいと考えています。 JenkinsはサーバBのドッキング・コンテナで稼動しています。
Jenkins(Job-DSL、DOCKER_HOST = "tcp:// serverA:2375"の一時設定)を介してサービスをデプロイできます。したがって、サーバーBのJenkins ContainerからServerA上のすべてのドッキング(作成)コマンドが実行されます。ENVA
およびENVB
の値を持たない点を除いて、サービスは起動して実行されています。
ジェンキンスは仕事-DSLグルーヴィーなスクリプトで次のように実行します:
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自体にそれらを設定しようとしたが、どちらも働きました。私がServer 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