DOCKER çözümü:
Docker-compose 1.5+, değişkenlerin değiştirilmesini etkinleştirdi gibi görünüyor: https://github.com/docker/compose/releases
En son Docker Compose, oluşturma dosyanızdan ortam değişkenlerine erişmenizi sağlar. Böylece ortam değişkenlerinizi kaynaklayabilir ve ardından Compose komutunu şu şekilde çalıştırabilirsiniz:
set -a
source .my-env
docker-compose up -d
Daha sonra $ {VARIABLE} kullanarak docker-compose.yml değişkenlerine şu şekilde başvurabilirsiniz:
db:
image: "postgres:${POSTGRES_VERSION}"
Ve burada alınan dokümanlar hakkında daha fazla bilgi: https://docs.docker.com/compose/compose-file/#variable-substitution
Docker-compose komutunu bu yapılandırmayla çalıştırdığınızda, Compose kabuktaki POSTGRES_VERSION ortam değişkenini arar ve değerini değiştirir. Bu örnekte, Compose, yapılandırmayı çalıştırmadan önce görüntüyü postgres: 9.3 olarak çözümler.
Bir ortam değişkeni ayarlanmamışsa, Compose, boş bir dize ile değiştirir. Yukarıdaki örnekte, POSTGRES_VERSION ayarlanmamışsa, resim seçeneğinin değeri postgres: şeklindedir.
Hem $ VARIABLE hem de $ {VARIABLE} sözdizimi desteklenir. $ {VARIABLE-default} ve $ {VARIABLE / foo / bar} gibi genişletilmiş kabuk stili özellikleri desteklenmez.
Yapılandırma değerine gerçek bir dolar işareti koymanız gerekiyorsa, çift dolar işareti ($$) kullanın.
Ve bu özelliğin bu çekme isteğine eklendiğine inanıyorum: https://github.com/docker/compose/pull/1765
BASH çözümü:
İnsanların Docker'ın ortam değişkenleri desteği ile ilgili sorunları olduğunu fark ettim. Docker'daki ortam değişkenleriyle uğraşmak yerine bash gibi temellere geri dönelim! İşte bir bash betiği ve bir .env
dosya kullanan daha esnek bir yöntem .
Örnek bir .env dosyası:
EXAMPLE_URL=http://example.com
# Note that the variable below is commented out and will not be used:
# EXAMPLE_URL=http://example2.com
SECRET_KEY=ABDFWEDFSADFWWEFSFSDFM
# You can even define the compose file in an env variable like so:
COMPOSE_CONFIG=my-compose-file.yml
# You can define other compose files, and just comment them out
# when not needed:
# COMPOSE_CONFIG=another-compose-file.yml
daha sonra bu bash betiğini aynı dizinde çalıştırın;
#!/bin/bash
docker rm -f `docker ps -aq -f name=myproject_*`
set -a
source .env
cat ${COMPOSE_CONFIG} | envsubst | docker-compose -f - -p "myproject" up -d
Oluşturma dosyanızdaki env değişkenlerinize her zamanki bash sözdizimiyle (yani , dosyadan ${SECRET_KEY}
eklemek için ) başvurmanız yeterlidir .SECRET_KEY
.env
Not COMPOSE_CONFIG
benim tanımlanan .env
dosya ve benim bash komut kullanılır, ancak kolayca sadece yerini alabilir {$COMPOSE_CONFIG}
ile my-compose-file.yml
bash komut.
Ayrıca tüm dağıtımlarımı "projem" önekiyle adlandırarak bu dağıtımı etiketlediğimi de unutmayın. İstediğiniz herhangi bir adı kullanabilirsiniz, ancak daha sonra kolayca başvurabilmeniz için kapsayıcılarınızı tanımlamanıza yardımcı olur. Kaplarınızın durumsuz olduğu varsayıldığında, bu komut dosyası kaplarınızı .env dosya parametrelerinize ve oluşturma YAML dosyanıza göre hızla kaldıracak ve yeniden dağıtacaktır.
Güncelleme
Bu yanıt oldukça popüler göründüğünden, Docker dağıtım iş akışımı daha derinlemesine açıklayan bir blog yazısı yazdım: http://lukeswart.net/2016/03/lets-deploy-part-1/ Bu, eklediğinizde yardımcı olabilir nginx yapılandırmaları, LetsEncrypt sertifikaları ve bağlantılı kapsayıcılar gibi bir dağıtım yapılandırmasında daha karmaşık.