【发布时间】:2018-07-02 08:13:48
【问题描述】:
我正在将交叉编译环境设置为 docker 容器。在构建过程中,我为嵌入式设备安装了 SDK:
ADD sdk.tar /opt
WORKDIR /opt/
RUN sdkinstall.sh
将sdk安装在文件夹/opt/sdk/
现在我有一个文件/opt/sdk/envsetup,其中包含一些环境变量:
export SDKTARGETSYSROOT=/opt/sdk/sysroots/cortexa9hf-vfp-neon-gad-linux-gnueabi
export PATH=/opt/sdk/sysroots/x86_64-gadsdk-linux/usr/bin:/opt/sdk/sysroots/x86_64-gadsdk-linux/usr/bin/arm-gad-linux-gnueabi:$PATH
export PKG_CONFIG_SYSROOT_DIR=$SDKTARGETSYSROOT
.... and so on
通常,当我在容器中运行 shell 时,我会执行 source /opt/sdk/envsetup,然后从 shell 编译内容。
但是,我想要实现的是,所有这些环境变量都存在于 docker 容器内的系统范围内,并且在我执行诸如 docker run -it xyz:latest make <somedir> 之类的操作时会被考虑在内。
我正在通过调用 docker run -it xyz:latest echo $SDKTARGETSYSROOT 对此进行测试,并且我希望容器能够打印 /opt/sdk/sysroots/cortexa9hf-vfp-neon-gad-linux-gnueabi`
到目前为止我试图实现的目标:
- 将变量添加到 /etc/environment:
RUN cat /opt/sdk/environment-setup-cortexa9hf-vfp-neon-gad-linux-gnueabi | cut -d" " -f 2 >> /etc/environment - 将变量添加到 /etc/profile、/root/.profile 和 /root/.bashrc:
RUN echo -e "# Auto source some variables\nsource /opt/sdk/environment-setup-cortexa9hf-vfp-neon-gad-linux-gnueabi" >> [...] - 通过
ENV SDKTARGETSYSROOT /opt/sdk/sysroots/cortexa9hf-vfp-neon-gad-linux-gnueabi在 dockerfile 中手动添加一个 var,只是为了测试行为 -
.或/bin/bash -c 'source'文件/opt/sdk/envsetup
这些都没有导致我的预期结果。如何正确设置这些变量?
由于包含变量的文件在 docker build 的开头是未知的,并且是在容器内的 sdk 安装期间创建的,我不太喜欢通过 ENV 手动将其内容添加到 dockerfile 中的想法,即使这有效,但没有。
【问题讨论】:
标签: shell docker environment-variables dockerfile docker-build