Compose: لا تتوفر متغيرات البيئة ذات القيم الافتراضية داخل الإنشاء

تم إنشاؤها على ١٣ فبراير ٢٠١٧  ·  3تعليقات  ·  مصدر: docker/compose

المشكلة

توفر متغيرات البيئة داخل ملف الإنشاء مما يلي:

  • شل أو ملف .env
  • المحددة في إنشاء ملف

يشعر بعدم الاتساق. لا تتوفر متغيرات البيئة ذات القيم الافتراضية داخل الإنشاء ما لم يتم توفيرها صراحةً من خارجها.

المثال

ضع في اعتبارك ملف الإنشاء الأدنى التالي:

version: '3'
services:
    example:
        environment:
            TAG: edge
        image: alpine:${TAG}

المتغير ${TAG} غير متوفر _ في أي مكان_ داخل ملف الإنشاء.

على سبيل المثال:

$ docker-compose up
WARNING: The TAG variable is not set. Defaulting to a blank string.
Pulling example (alpine:latest)...
...

لكن:

$ TAG=edge docker-compose up
Pulling example (alpine:edge)...
...

$ TAG متاح الآن داخل ملف الإنشاء.

النتيجة

من الضروري دائمًا تقديم قيم متغيرة env بشكل صريح لتتمكن من استخدامها داخل ملف الإنشاء.

من الطبيعي أن نتوقع توفر / حل جميع متغيرات env داخل ملف الإنشاء ، خاصة تلك التي تم تحديدها بواسطته في المقام الأول. على الرغم من أن هذا لا يبدو أن هذا هو الحال.

آسف إذا تم الرد على هذا من قبل ، لم أجد حالة الاستخدام هذه في قائمة المشكلات.

المواصفات التقنية:

$ docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64
 Experimental: true
$ docker-compose version
docker-compose version 1.11.1, build 7c5d5e4
docker-py version: 2.0.2
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2j  26 Sep 2016
kinquestion

التعليق الأكثر فائدة

يرجى الرجوع إلى صفحة توضيح: https://docs.docker.com/compose/environment-variables/

باختصار ، يوضح الإدخال environment في ملف الإنشاء متغيرات البيئة التي ستكون متاحة داخل الحاوية / الخدمة الخاصة بك في وقت التشغيل. من ناحية أخرى ، يتم استبدال المتغير باستخدام المتغيرات الموجودة على المضيف حيث يتم تنفيذ docker-compose . هاتان مجموعتان مختلفتان ويجب أن تبقى منفصلة.

ال 3 كومينتر

يرجى الرجوع إلى صفحة توضيح: https://docs.docker.com/compose/environment-variables/

باختصار ، يوضح الإدخال environment في ملف الإنشاء متغيرات البيئة التي ستكون متاحة داخل الحاوية / الخدمة الخاصة بك في وقت التشغيل. من ناحية أخرى ، يتم استبدال المتغير باستخدام المتغيرات الموجودة على المضيف حيث يتم تنفيذ docker-compose . هاتان مجموعتان مختلفتان ويجب أن تبقى منفصلة.

شكرا على التوضيح!

واجهت نفس المشكلة الآن ولكن لا يمكنني حلها. لدي برنامج نصي شل يقوم بتغليف استدعاء عامل إنشاء ميناء التحميل:

...
docker-compose $DOCKER_COMPOSE_FILES up $@
...

DOCKER_COMPOSE_FILES عبارة عن سلسلة تحتوي على "-f file1.yml -f file2.yml ...". كل شيء يعمل بشكل جيد.

إدخال صورة Docker-compose الخاص بي هو:

...
image: "...-service:${DOCKER_TAG}"
...

جربت عدة طرق:

  • تحديد مصادر الملف باستخدام DOCKER_TAG داخل البرنامج النصي shell
  • تصدير DOCKER_TAG يدويًا في البرنامج النصي shell
  • إنشاء عامل ميناء الاتصال مع DOCKER_TAG في المقدمة:
    DOCKER_TAG=... docker-compose...

لا شيء يعمل - DOCKER_TAG غير متاح. هل يعرف أحد ما أفعله خطأ؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات