[英]Update Environment variable Docker periodically
我正在尝试创建一个 docker 环境,其中要配置的一件事是一个名为“DATABRICKS_API_TOKEN”的环境变量。 现在,这个令牌是短暂的(一个小时),因此我必须在后台每小时刷新一次。 由于我不希望开发人员的体验受到影响,我希望它能够无缝地工作,而开发人员不必每小时重建容器(和/或底层映像)。
我一直在考虑让 python 脚本(或 shell)在后台每小时运行一次,在开发人员工作的容器内。 从我所做的各种尝试来看,环境变量似乎没有得到更新,除非我重建图像(或者如果我将变量作为容器参数传递给容器)。
例如,如果这是我的 dockerfile
FROM artifactstore.domain.com/docker/centos:8.2.2004
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
ARG DBCVER
# Configure apt
ENV DEBIAN_FRONTEND=noninteractive
ENV DATABRICKS_API_TOKEN=abc
# Mini Conda Start
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV PATH /opt/conda/bin:$PATH
RUN echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc
ARG DBCONNECT_USER_HOME=/usr/local/dbconnect/
ENV DBCONNECT_HOME=${DBCONNECT_USER_HOME}
ENV http_proxy=someproxy
ENV https_proxy=someproxy
WORKDIR ${DBCONNECT_USER_HOME}
# Corporate PyPi proxy
ENV PIP_INDEX_URL someurl
ENV PIP_DISABLE_PIP_VERSION_CHECK TRUE
# add self-signed root certs
......something for that
# add artifact proxy repositories
RUN rm /etc/yum.repos.d/*
COPY repos/* /etc/yum.repos.d/
COPY conda/* ${DBCONNECT_USER_HOME}/miniconda.sh
COPY entrybash.sh .
# install prerequisites
RUN update-ca-trust /usr/share/pki/ca-trust-source/anchors/certcomp.pem \
&& yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel && \
/bin/bash ${DBCONNECT_USER_HOME}/miniconda.sh -b -p /opt/conda && \
rm ${DBCONNECT_USER_HOME}/miniconda.sh && \
/opt/conda/bin/conda clean -tipsy && \
ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
echo "conda activate dbconnect" >> ~/.bashrc
ENV TINI_VERSION v0.16.1
ADD ./tini /usr/bin/tini
RUN chmod +x /usr/bin/tini/tini
RUN chmod +x /usr/local/dbconnect/entrybash.sh
ENTRYPOINT ["/usr/bin/tini/tini","--", "./entrybash.sh"]
COPY environments/environment7.3.3b.yml .
RUN conda env create -f environment7.3.3b.yml \
&& echo '{}' > /root/.databricks-connect
# Make RUN commands use the new environment:
SHELL ["conda", "run", "-n", "dbconnect", "/bin/bash", "-c"]
RUN pip install adal selenium
在entrybash.sh中,一个简单的赋值
export DATABRICKS_API_TOKEN="new value"
当我构建图像并在容器内运行它时,当我执行 printenv 时,我得到 DATABRICKS_API_TOKEN=abc。
我尝试使用 cmd,而不是入口点并使用 shell 形式,但结果相同。
然后我在这里查看了这个 SO 帖子并看到了这个
In order to change variables in your current shell, you can always source your script file
并相应地做了以下,但仍然相同
CMD ["sh", "-c", "source /usr/local/dbconnect/entrybash.sh"]
这有可能吗,我想要达到的目标是什么?
那么,如果您需要每小时刷新一个令牌并且您希望开发人员体验是无缝的,那么有哪些选择?
在这里,我试图只做一个一次性脚本,但如果我发现这是可能的,我会研究安排它的选项,但如果根本不可能,那将是徒劳的。
docker 的新手,顺便说一句,但我已尽力四处寻找资源,但在这方面找不到任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.