Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

145
Views
¿Docker-compose admite la combinación de variables de entorno de campo de extensión con declaraciones de servicio?

Usando la función de campos de extensión de Docker Compose 3.4, ¿es posible combinar un conjunto común de variables de entorno en forma de matriz (o cualquier matriz) con declaraciones específicas del servicio? La documentación no está clara en cuanto a si esto es compatible.

Llamar docker-compose up en el siguiente YAML da como resultado el restart , el punto de entrypoint y los volumes que se configuran en my-service , pero parece reemplazar la declaración de environment que proviene del campo de extensión con la declaración que existe en my-service . Me gustaría que se fusionaran.

 version: '3.4' x-service-config: &service-config restart: "on-failure" entrypoint: "" volumes: - "~/.aws:/home/serviceuser/.aws" environment: - "CommonVar1=foo" - "CommonVar2=bar" services: my-service: <<: *service-config image: my-service:latest environment: - "ServiceVar1=baz"
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La fusión solo ocurre en el nivel superior. Si desea fusionar una clave en un nivel inferior, use una plantilla separada.


Recreé el problema usando el siguiente archivo de redacción. Utiliza una imagen pública y ejecuta el comando env para que uno pueda seguirlo fácilmente sin dependencias externas.

Aquí hay un docker-compose.yml que funciona de forma independiente, que muestra cómo se fusiona el 'entorno':

 version: '3.4' x-service-config: &ref restart: 'on-failure' environment: &env 'foo': 'bar' 'bing': 'baz' services: bop: image: 'alpine' command: 'env' <<: *ref

Aquí está el resultado, que muestra que la clave de 'entorno' del ancla se está copiando:

 $ docker-compose up Creating network "merge_default" with the default driver Creating merge_bop_1 ... done Attaching to merge_bop_1 bop_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin bop_1 | HOSTNAME=d4122a655e1d bop_1 | foo=bar bop_1 | bing=baz bop_1 | HOME=/root merge_bop_1 exited with code 0

Aquí está el mismo archivo de redacción, pero con 'entorno' anulado en la definición de servicio 'bop':

 version: '3.4' x-service-config: &ref restart: 'on-failure' environment: &env 'foo': 'bar' 'bing': 'baz' services: bop: image: 'alpine' command: 'env' environment: 'bat': 'far' <<: *ref

y la salida correspondiente, mostrando solo bat=far y no las otras variables:

 $ docker-compose up Creating network "merge_default" with the default driver Creating merge_bop_1 ... done Attaching to merge_bop_1 bop_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin bop_1 | HOSTNAME=efe76cb7e09d bop_1 | bat=far bop_1 | HOME=/root merge_bop_1 exited with code 0

La solución es dividir esto en dos plantillas/anclajes de la siguiente manera:

 version: '3.4' x-service-config: &ref restart: 'on-failure' x-environment-config: &env 'foo': 'bar' 'bing': 'baz' services: bop: image: 'alpine' command: 'env' environment: <<: *env 'true': 'false' <<: *ref

y aquí está el resultado que muestra los valores combinados:

 $ docker-compose up Creating network "merge_default" with the default driver Creating merge_bop_1 ... done Attaching to merge_bop_1 bop_1 | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin bop_1 | HOSTNAME=617f90a94a7d bop_1 | foo=bar bop_1 | bing=baz bop_1 | true=false bop_1 | HOME=/root merge_bop_1 exited with code 0

Esto funciona porque está fusionando las dos claves que desea fusionar.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!