我基于以下 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 容器
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
但是,如果我用
root@9264667daf83:/# service ssh start
* Starting OpenBSD Secure Shell server sshd [ OK ]
root@9264667daf83:/#
而我以root身份通過ssh連接到Docker容器,就PATH完全不一樣了!
root@9264667daf83:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
為什么?PATH當我通過 ssh 連接到容器時,如何獲得正確的變數?
uj5u.com熱心網友回復:
您要求的環境變數已由 docker 本身使用ENV子句設定。檢查初始 Dockerfile的源代碼。
由 設定的變數ENV存在于構建階段、運行和執行到正在運行的容器中時。更多在這里。
但是當您通過 SSH 進入容器時,用于獲取檔案的常用 Linux 路徑~/.bashrc正在作業。但是PATH這些檔案中沒有conda、nvidia 等。
作為一種解決方法,您可以/root/.bashrc使用相應的export PATH. 例如,您可以添加到Dockerfile
RUN echo 'export PATH=/opt/conda/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH' >> /root/.bashrc
UPD
如果你想使用PATH與構建階段完全相同的方式,你可以使用
RUN echo "export PATH=${PATH}" >> /root/.bashrc
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/344452.html
下一篇:dockerrun停頓
