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

我的docker容器需要通过环境variables指定数据库参数。 在我的情况下,数据库参数被传递到容器(使用Cloud Foundry)作为一个jsonstring的环境variables。

我能够用这个命令拉出所需的数据库参数:

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

但是,如何将它们设置为泊坞窗图像所需的环境variables? Cloud Foundry传入的环境variables在容器启动之前不可用。

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

 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的回答之前,我发现了另一个select。 因为我正在使用云代工,所以我可以使用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