我构建了一个基于以下Dockerfile的Docker映像:
ARG PYTORCH="1.6.0"
ARG CUDA="10.1"
ARG CUDNN="7"
FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel
ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV CMAKE_PREFIX_PATH="$(dirname $(which conda))/../"
# SSH SERVER
RUN apt-get update && apt-get install openssh-server sudo -y
RUN echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
RUN echo 'root:root' | chpasswd
WORKDIR /
EXPOSE 22
CMD ["service ssh start"]我启动码头集装箱
docker run -it -d -p 7220:22 --name ssh-server-test ssh-server-image /bin/bash如果我用docker exec -it ssh-server-test /bin/bash或docker attach ssh-server-test连接到容器,就会得到预期的PATH:
root@9264667daf83:/# echo $PATH
/opt/conda/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin但是,如果我启动ssh服务器时
root@9264667daf83:/# service ssh start
* Starting OpenBSD Secure Shell server sshd [ OK ]
root@9264667daf83:/# 通过ssh作为根连接到Docker容器,那么PATH就完全不同了!
root@9264667daf83:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games为什么?当我通过ssh连接到容器时,如何获得正确的PATH变量?
发布于 2021-11-01 11:25:33
您所要求的环境变量已由docker本身使用ENV子句设置。检查初始Dockerfile的源代码。
ENV设置的变量存在于构建阶段,运行,以及在运行容器中执行时。更多的这里。
但是,当您将SSH放入容器中时,通常用于获取像~/.bashrc这样的文件的Linux路径是可以工作的。但是这些文件中没有包含conda、nvidia等的PATH。
作为解决办法,您可以在构建阶段用相应的/root/.bashrc修补export PATH。例如,您可以向Dockerfile中添加
RUN echo 'export PATH=/opt/conda/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH' >> /root/.bashrcUPD
如果您想使用与构建阶段完全相同的PATH,则可以使用
RUN echo "export PATH=${PATH}" >> /root/.bashrchttps://stackoverflow.com/questions/69788652
复制相似问题