PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Monday, August 22, 2022

[FIXED] Why does PATH differ when I connect to my Docker container with ssh or with exec/attach?

 August 22, 2022     docker, environment-variables, pytorch, server, ssh     No comments   

Issue

I build a Docker image based on the following Dockerfile:

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"]

I launch the Docker container with

docker run -it -d -p 7220:22 --name ssh-server-test ssh-server-image /bin/bash

If I connect to the container with docker exec -it ssh-server-test /bin/bash or docker attach ssh-server-test, I get the PATH I expect:

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

However, if I start an ssh server with

root@9264667daf83:/# service ssh start
 * Starting OpenBSD Secure Shell server sshd                                                                                                                                [ OK ] 
root@9264667daf83:/# 

and I connect to the Docker container through ssh as root, then the PATH is completely different!

root@9264667daf83:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Why? And how can I get the right PATH variable also when I connect to the container through ssh?


Solution

The environment variable you are asking of has been set by docker itself, using ENV clause. Check the source code of the initial Dockerfile.

Variables that are set by ENV exist on the build stage, run, and when you exec into a running container. More here.

But when you SSH into the container, the usual Linux path for sourcing files like ~/.bashrc is working. But there is no PATH with conda, nvidia, etc in these files.

As a workaround, you can patch /root/.bashrc on the build stage with the corresponding export PATH. For example, you can add to the Dockerfile

RUN echo 'export PATH=/opt/conda/bin:/usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH' >> /root/.bashrc

UPD

I case if you want to use exactly the same PATH as on the build stage, you can use

RUN echo "export PATH=${PATH}" >> /root/.bashrc


Answered By - Pavel Sapezhka
Answer Checked By - Mildred Charles (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing