簡體   English   中英

為什么 dockerfile ENV 不能為非 root 用戶覆蓋 $PATH?

[英]Why dockerfile ENV cannot override $PATH for non-root user?

我想為非 root 用戶在 ubuntu docker 映像中安裝 miniconda。 到目前為止,安裝部分是成功的,但我無法將 conda 的路徑添加到該用戶的環境變量$PATH中。 我試圖用 docker ENV來實現這一點。 這是我的 Dockerfile

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y openssh-server sudo

RUN useradd -rm -d /home/devp -s /bin/bash -g root -G sudo -u 1000 devp && \
 echo 'devp:devp11' | chpasswd && \
 adduser devp sudo

WORKDIR /home/devp

USER devp
RUN wget \
    https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && mkdir ~/.conda \
    && bash Miniconda3-latest-Linux-x86_64.sh -b \
    && rm -f Miniconda3-latest-Linux-x86_64.sh 
ENV PATH=/home/devp/miniconda3/bin:${PATH}
ARG PATH=/home/devp/miniconda3/bin:${PATH}
#RUN conda env create --quiet -n env1 --file env1.yml

USER root

RUN mkdir /var/run/sshd
RUN service ssh start
EXPOSE 22

CMD ["/usr/sbin/sshd","-D"]

我運行 docker 和docker run --name img -p 10022:22 -d img:tag

對於我的 root 用戶, $PATH被覆蓋

/home/devp/miniconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

對於我的非 root 用戶,當我ssh devp@xxxx -p 10022 'echo $PATH'時, $PATH不會被覆蓋

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

我有兩個問題:

  1. 如何為非 root 用戶覆蓋$PATH
  2. 為什么ENV不適用於非 root 用戶?

這里的區別不是源於root 與非 root 用戶,而是源於進程的啟動方式,即直接由 docker 與通過 ssh login 啟動

使用ENV指令,您可以指定由docker為容器內啟動的進程設置的環境變量。 But when logging in via ssh the new shell presented to you is a login shell started by the ssh daemon.

但是ssh在開始登錄shell之前清除並重置了大部分環境變量。 此外,登錄 shell 通常會讀取一些配置文件來設置它自己的環境,而PATH幾乎總是配置的環境變量之一。

因此,要更改通過ssh啟動的 shell 的PATH ,您必須在sshd_config或通過用戶登錄 shell 配置進行配置,例如/etc/profile~/.bashrc等。

另請參閱https://unix.stackexchange.com/questions/38175/difference-between-login-shell-and-non-login-shell


但正如David Maze 在評論中所說:不鼓勵在 docker 容器內使用sshd 容器不是虛擬機,而是只運行一個進程/應用程序。

因此,根據您的用例,可能有更清潔的解決方案使用docker 方式的容器!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM