docker - 如何使用 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
我应该怎么办?
解决方案
这个问题是由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
这段代码工作正常。
推荐阅读
- c++ - 在不同的编译器上转换为 void**
- java - Java Swing 按钮文本出现不同
- python-3.x - 根据要删除的字符串列表删除字符串末尾的子字符串
- r - 观察循环内的事件
- android - 我怎样才能在android studio(Camera2)中获得相机分辨率
- django - 如何在表单验证后将 Django 表单提交重定向到新选项卡?
- java - 我在进行一些基本的 JSON 解析时遇到问题
- android - 项目展开时如何将所有项目绑定到回收站视图的底部?
- qt-creator - Qt Creator:为 C++ 头文件生成 UUID
- javascript - Android WebView:如何从资产文件夹访问 JS 功能