Docker运行持久化环境变量?
当我运行此程序时,它会打印:Docker运行持久化环境变量?,docker,docker-compose,Docker,Docker Compose,当我运行此程序时,它会打印: FROM bitnami/minideb:latest RUN . /etc/os-release RUN echo "code1=${VERSION_CODENAME}" RUN . /etc/os-release && echo "code2=${VERSION_CODENAME}" 是否有某种方法可以在运行命令和/或从容器内的文件加载环境变量的单独命令之间持久保存环境变量?简而言之 使用ENV将环境变量设置为图像 或者source您的en
FROM bitnami/minideb:latest
RUN . /etc/os-release
RUN echo "code1=${VERSION_CODENAME}"
RUN . /etc/os-release && echo "code2=${VERSION_CODENAME}"
是否有某种方法可以在运行命令和/或从容器内的文件加载环境变量的单独命令之间持久保存环境变量?简而言之
- 使用
将环境变量设置为图像李>ENV
- 或者
您的env文件位于source
docker run
code1=
code2=buster
根据docker文件,docker引擎将解释如下说明:
运行/etc/os-release
:从imagebitnami/minideb:latest
和source
文件/etc/os-release
启动一个中间容器,然后将此容器提交到一个id为的映像(比如ab12
)运行echo“code1=${VERSION\u CODENAME}”
:从映像ab12
启动另一个中间容器,该容器在上一步中提交。docker引擎在此容器中运行echo“code1=${VERSION\u CODENAME}”
,然后将其提交到另一个映像cd34
source
和echo
在同一个中间容器中执行source
和echo
命令在不同的容器中运行,这就是您无法获取所需变量的原因
因此,ENV
指令是解决问题的推荐方法。但如果您真的需要从文件中读取ENV,这里有一个解决方法
my env.sh
的文件:#/bin/bash
导出ENV1=XXX
导出ENV2=XXX
# ...
entrypoint.sh的文件
:#/bin/bash
. /my-env.sh
#在将此图像启动到容器中时要执行的其他操作
docker build-t.
生成映像。在生成映像之前,当前工作目录应包含:
- my-env.sh
- entrypoint.sh
- Dockerfile
祝你好运 我认为您不能:那么
ENV TESTDATE=`date`
呢?问题是环境变量来自我正在使用的图像的内部。我运行的是:latest
,因此操作系统的代码名可能会随着时间的推移而改变。这就是我不想硬编码的原因。否则我只会使用ENV
。ENTRYPOINT
是否在其他命令运行之前运行。。?如果是这样的话,那就可以了。不,ENTRYPOINT
将不会在Dockerfile中的任何指令之前执行。只有在将映像启动到容器中时,才会执行该操作。
FROM bitnami/minideb:latest
RUN . /etc/os-release
RUN echo "code1=${VERSION_CODENAME}"
RUN . /etc/os-release && echo "code2=${VERSION_CODENAME}"
FROM bitnami/minideb:latest
# copy files from local to image
COPY my-env.sh /my-env.sh
COPY entrypoint.sh /entrypoint.sh
# when start this image into a container, execute the following command
ENTRYPOINT ["bash", "/entrypoint.sh"]