我正在构建docker映像,并希望永久更改其env变量和路径。我简化的dockerfile是这样的:
FROM python:3.6.8-slim-stretch
USER root
RUN pip3 install pyspark
RUN touch /etc/profile.d/set-up-env.sh && \
echo export SPARK_HOME='/usr/local/lib/python3.6/site-packages/pyspark' >> /etc/profile.d/set-up-env.sh && \
echo export PATH='${SPARK_HOME}/bin:${PATH}' >> /etc/profile.d/set-up-env.sh && \
echo export PYSPARK_PYTHON='python3.6' >> /etc/profile.d/set-up-env.sh && \
chmod +x /etc/profile.d/set-up-env.sh
可以使用docker build -t data-job-base .
成功构建图像
但是,当我运行它docker run --rm -it data-job-base bash
时,在此正在运行的容器中SPARK_HOME为空,并且PATH没有变化。我cat /etc/profile.d/set-up-env.sh
可以看到它写的正确:
export SPARK_HOME=/usr/local/lib/python3.6/site-packages/pyspark
export PATH=${SPARK_HOME}/bin:${PATH}
export PYSPARK_PYTHON=python3.6
我不明白,为什么启动shell时无法运行此set-env.sh?
请注意,修改/etc/environment
也不起作用。
答案 0 :(得分:0)
您可以在Dockerfile中使用ENV指令
FROM python:3.6.8-slim-stretch
USER root
ENV SPARK_HOME=/usr/local/lib/python3.6/site-packages/pyspark \
PATH=${SPARK_HOME}/bin:${PATH} \
PYSPARK_PYTHON=python3.6
RUN pip3 install pyspark
答案 1 :(得分:0)
好的,我已经通过在bash.bashrc中而不是profile,profile.d或环境中添加我的shell命令来解决了这个问题。