将 docker 环境变量设置为具有不同名称的现有环境变量

Setting docker environment variable to existing environment variable with different name

我的 docker 容器需要通过环境变量指定数据库参数。在我的情况下,数据库参数作为 json 字符串的环境变量传递到容器(使用 Cloud Foundry)。

我可以使用此命令提取所需的数据库参数:

${echo $VCAP_SERVICES | jq -r '.dbaas[0].credentials.username'}

但如何将它们设置为 docker 图像所需的环境变量? Cloud Foundry 传入的环境变量在容器启动之前不可用。

您可以围绕元数据库容器创建自己的包装器容器,如下所示:

FROM metabase/metabase
ADD run.sh /usr/local/bin/run.sh
RUN chmod +x /usr/local/bin/run.sh
ENTRYPOINT /usr/local/bin/run.sh

并有一个 run.sh 脚本,如下所示:

!#/bin/bash

export DB_USERNAME=$(echo $VCAP_SERVICES | jq -r '.dbaas[0].credentials.username')
# more vars here as needed... 

# Now call the original entrypoint
/app/run_metabase.sh $@

Scott Rankin 的回答是正确的。在看到斯科特的回答之前,我找到了另一个选择。因为我使用的是 cloud foundry,所以我能够使用 manifest.yml 文件,如下所示:

---
applications:
- name: metabase
  command: |
    apk update &&
    apk add ca-certificates &&
    update-ca-certificates &&
    apk add openssl &&
    wget -O /tmp/jq-linux64 https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 &&
    chmod +x /tmp/jq-linux64 &&
    export MB_DB_HOST=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.host') &&
    export MB_DB_PORT=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.port') &&
    export MB_DB_DBNAME=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.database') &&
    export MB_DB_USER=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.username') &&
    export MB_DB_PASS=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.password') &&
    exec /app/run_metabase.sh
  env:
    MB_DB_TYPE: mysql
  memory: 2GB