首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助查找Dockerfile生成的环境变量

需要帮助查找Dockerfile生成的环境变量
EN

Stack Overflow用户
提问于 2022-07-22 00:10:13
回答 1查看 160关注 0票数 0

我正在运行一个Docker源代码,它有一个如下所示的Dockerfile:

代码语言:javascript
复制
FROM node:14-slim as build

# install node-gyp dependencies
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends apt-utils cron g++ make python

# add pin script
WORKDIR /
ADD scripts/pinVersions.js scripts/cleanup.sh ./
RUN chmod +x /cleanup.sh

# build server
WORKDIR /app
ADD packages/server .
RUN node /pinVersions.js && yarn && yarn build && /cleanup.sh

# build worker
WORKDIR /worker
ADD packages/worker .
RUN node /pinVersions.js && yarn && yarn build && /cleanup.sh

FROM couchdb:3.2.1
# TARGETARCH can be amd64 or arm e.g. docker build --build-arg TARGETARCH=amd64
ARG TARGETARCH amd64
#TARGETBUILD can be set to single (for single docker image) or aas (for azure app service)
# e.g. docker build --build-arg TARGETBUILD=aas ....
ARG TARGETBUILD single
ENV TARGETBUILD $TARGETBUILD

COPY --from=build /app /app
COPY --from=build /worker /worker

ENV \
  APP_PORT=4001 \
  ARCHITECTURE=amd \
  BUDIBASE_ENVIRONMENT=PRODUCTION \
  CLUSTER_PORT=80 \
  # CUSTOM_DOMAIN=budi001.custom.com \
  DEPLOYMENT_ENVIRONMENT=docker \
  MINIO_URL=http://localhost:9000 \
  POSTHOG_TOKEN=phc_fg5I3nDOf6oJVMHSaycEhpPdlgS8rzXG2r6F2IpxCHS \
  REDIS_URL=localhost:6379 \
  SELF_HOSTED=1 \
  TARGETBUILD=$TARGETBUILD \
  WORKER_PORT=4002 \
  WORKER_URL=http://localhost:4002 \
  APPS_URL=http://localhost:4001

# These secret env variables are generated by the runner at startup
# their values can be overriden by the user, they will be written
# to the .env file in the /data directory for use later on
#  REDIS_PASSWORD=something\
#  COUCHDB_PASSWORD=something \
#  COUCHDB_USER=something \
#  COUCH_DB_URL=http://something@localhost:5984 \
#  INTERNAL_API_KEY=something \
#  JWT_SECRET=something \
#  MINIO_ACCESS_KEY=something \
#  MINIO_SECRET_KEY=something \

有一个看起来像这样的runner.sh:

代码语言:javascript
复制
#!/bin/bash
declare -a ENV_VARS=("COUCHDB_USER" "COUCHDB_PASSWORD" "MINIO_ACCESS_KEY" "MINIO_SECRET_KEY" "INTERNAL_API_KEY" "JWT_SECRET" "REDIS_PASSWORD")
if [ -f "/data/.env" ]; then
    export $(cat /data/.env | xargs)
fi
# first randomise any unset environment variables
for ENV_VAR in "${ENV_VARS[@]}"
do
    temp=$(eval "echo \$$ENV_VAR")
    if [[ -z "${temp}" ]]; then
        eval "export $ENV_VAR=$(uuidgen | sed -e 's/-//g')"
    fi
done
if [[ -z "${COUCH_DB_URL}" ]]; then
    export COUCH_DB_URL=http://$COUCHDB_USER:$COUCHDB_PASSWORD@localhost:5984
fi
if [ ! -f "/data/.env" ]; then
    touch /data/.env
    for ENV_VAR in "${ENV_VARS[@]}"
    do
        temp=$(eval "echo \$$ENV_VAR")
        echo "$ENV_VAR=$temp" >> /data/.env
    done
fi

# make these directories in runner, incase of mount
mkdir -p /data/couch/dbs /data/couch/views
chown couchdb:couchdb /data/couch /data/couch/dbs /data/couch/views
redis-server --requirepass $REDIS_PASSWORD &
/opt/clouseau/bin/clouseau &
/minio/minio server /data/minio &
/docker-entrypoint.sh /opt/couchdb/bin/couchdb &
/etc/init.d/nginx restart
if [[ ! -z "${CUSTOM_DOMAIN}" ]]; then
    # Add monthly cron job to renew certbot certificate
    echo -n "* * 2 * * root exec /app/letsencrypt/certificate-renew.sh ${CUSTOM_DOMAIN}" >> /etc/cron.d/certificate-renew
    chmod +x /etc/cron.d/certificate-renew
    # Request the certbot certificate
    /app/letsencrypt/certificate-request.sh ${CUSTOM_DOMAIN}
fi

/etc/init.d/nginx restart
pushd app
pm2 start --name app "yarn run:docker"
popd
pushd worker
pm2 start --name worker "yarn run:docker"
popd
sleep 10
curl -X PUT ${COUCH_DB_URL}/_users
curl -X PUT ${COUCH_DB_URL}/_replicator
sleep infinity

现在我想知道COUCHDB_USER和COUCHDB_PASSWORD的值是多少,这两个值应该是随机生成的。

  • 我试过docker exec -it containername /bin/bashprintenv,它不在那里。
  • 我尝试了docker exec -it containername /bin/bash并查找/data文件夹,看不到任何.env文件

任何码头专家能建议我在哪里找到环境变量吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 00:47:56

这并不是真正的码头工人问题:这里所发生的一切都不是码头特有的。

环境变量在runner.sh中设置。有两个地方设置了这些变量:

  1. 如果在脚本开头存在/data/.env,则将这些变量导出到环境中: 如果-f“/data/..env”,则导出$(cat /data/..env\ xargs) fi。
  2. 列表ENV_VARS中以前没有设置的变量被设置为随机值,然后导出到环境中: 对于"${ENV_VARS@}“do temp=$中的ENV_VARS@,如果[ -z”${temp}],则-z“导出$ENV_VAR=$(uuidgen sed -e‘s/-//g’s‘s/g’)。

您不会在docker exec -it containername /bin/bash中看到它们,因为该shell不是runner.sh的子程序,因此当然不会看到该脚本设置的环境变量。

看起来runner.sh应该无条件地创建/data/.env,所以不清楚为什么您没有看到它。请注意,您不会看到带有简单lsls;例如,您需要运行ls -A /.data

更新

如果我遵循图像生成指令,然后启动映像(docker run --name budibase budibase:latest),那么当我将docker exec放入到结果容器中时,就会看到/data/.env

代码语言:javascript
复制
$ docker exec budibase ls -A /data
.env
couch
minio
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73073848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档