首页 > 解决方案 > 如何使用 dockerfile 在 continuumio/anaconda3 映像上添加 PATH

问题描述

我想在 docker 上安装带有 continuumio/anaconda3 图像的 spark。

Dockerfile

FROM continuumio/anaconda3
RUN apt update && apt install -y openssh-server curl vim
RUN mkdir /var/run/sshd
RUN curl -O http://ftp.tsukuba.wide.ad.jp/software/apache/spark/spark-2.4.3/spark-2.4.3-bin-hadoop2.7.tgz &&\
tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz &&\
mv spark-2.4.3-bin-hadoop2.7 /usr/local &&\
ln -s /usr/local/spark-2.4.3-bin-hadoop2.7 /usr/local/spark
ENV PATH "/usr/local/spark/bin:${PATH}" 
RUN sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config &&\
echo "root:mypasswd" | chpasswd && \
CMD ["/usr/sbin/sshd", "-D"]

我从 dockerfille 构建,spark 和 sshd 工作正常。但是这个命令的路径不起作用。

ENV PATH "/usr/local/spark/bin:${PATH}" 
#spark-shell
-bash: spark-shell: command not found

这个带有完整路径的命令可以正常工作。

#/usr/local/spark/bin/spark-shell

我试图将该行添加到 /etc/profile 或 /etc/profile.d/xxx.sh,但我得到了同样糟糕的结果。

RUN echo "export PATH=${PATH}:/user/local/spark/bin" >> the files

此问题由 ssh 访问引起。因为这个命令对 env 工作得很好。

docker run -it imagename bash

我应该怎么办?

标签: dockerdocker-composedockerfile

解决方案


这个问题是由ssh引起的,它不读取.bashrc和/etc/profile.d/,所以我改变了这一行

ENV PATH "/usr/local/spark/bin:${PATH}" 

#add path to .bashrc
RUN echo "PATH=/usr/local/spark/bin:${PATH}" >> ~/.bashrc
#make .bash_profile which read .bashrc when ssh access
RUN echo "if [ -f ~/.bashrc ]; then  . ~/.bashrc;  fi" >>~/.bash_profile

这段代码工作正常。


推荐阅读