首页 > 解决方案 > docker-compose 3.2+ 绑定语句因环境变量而失败

问题描述

我有一个 env 文件 userid.env,定义了一个变量“userid”,然后我尝试在绑定语句中使用它。docker-compose config 显示用户 ID 没有被带入绑定语句。建议?

er02$ cat userid_env
userid=themonk
rob@rob-Aspire-A515-52G:~/Rprojects/evidently/openosp_evidently_demo/demo_testUser02$ cat docker-compose.yml
---
version: "3.2"

services:
  evidently:
    image: evidentlyslocker/evidently_sillydemo:latest
    env_file:
      - userid_env
    volumes:
      - type: bind
        source: /home/jenkins/workspace/${userid}/test
        target: /data
        read_only: true
rob@rob-Aspire-A515-52G:docker-compose config
WARNING: The userid variable is not set. Defaulting to a blank string.
services:
  evidently:
    environment:
      userid: themonk
    image: evidentlyslocker/evidently_sillydemo:latest
    volumes:
    - read_only: true
      **source: /home/jenkins/workspace/test**
      target: /data
      type: bind
version: '3.2'


所需的输出是包含 userid 变量的绑定语句,例如:

卷:-类型:绑定 源:/home/jenkins/workspace/themonk/test 目标:/data read_only: true

标签: docker-composeenvironment-variablesyaml

解决方案


这个问题与这个线程有关:https ://github.com/docker/compose/issues/6581

cat userid.env
userid=themonk

所以:

eval $(egrep -v '^#' ./*.env | xargs) docker-compose config

产量:

services:
  evidently:
    image: evidentlyslocker/openosp_evidently_sillydemo:latest
    volumes:
    - read_only: true
      source: /home/jenkins/workspace/themonk/test
      target: /data
      type: bind
version: '3.2'

为什么我不能直接执行此操作仍不清楚,但这有效,并且运行良好。


推荐阅读