在Docker

时间:2017-10-19 16:09:40

标签: bash docker

我遇到了Docker创建一个没有设置环境变量的容器的问题,我知道我在图像定义中设置了该容器。

我创建了一个生成OpenSuse 42.3图像的Dockerfile。我需要在图像中设置一些环境变量,以便从图像中启动容器的任何人都可以使用我编译并放置在图像中的代码。

我创建了一个名为“image_env_setup.sh”的shell文件,其中包含必要的环境变量定义。我还手动将这些环境变量定义添加到Dockerfile。

USER codeUser
COPY ./docker/image_env_setup.sh /opt/MyCode

ENV PATH="$PATH":"/opt/MyCode/bin:/usr/lib64/mpi/gcc/openmpi/bin"
ENV LD_LIBRARY_PATH="/usr/lib64:/opt/MyCode/lib:"
ENV PS1="[\u@docker: \w]\$ "
ENV TERM="xterm-256color"
ENV GREP_OPTIONS="--color=auto"
ENV EDITOR=/usr/bin/vim

USER root
RUN chmod +x  /opt/MyCode/image_env_setup.sh
USER codeUser
RUN /opt/MyCode/image_env_setup.sh
RUN /bin/bash -c "source /opt/MyCode/image_env_setup.sh"

我用来创建容器的命令是:

docker run  -it -d --name ${containerName}  -u $userID:$groupID         \
            -e USER=$USER --workdir="/home/codeUser"            \
            --volume="${home}:/home/codeUser" ${imageName} /bin/bash  \

唯一有效的方法是在容器启动时传递shell文件以便再次运行。

docker start $MyImageTag
docker exec -it $MyImageTag /bin/bash --rcfile /opt/MyCode/image_env_setup.sh

我认为在容器中设置shell变量并不困难,因此任何进入它的条目都会为用户提供已经定义的shell变量。

2 个答案:

答案 0 :(得分:5)

RUN条目无法修改环境变量(我假设您要在image_env_setup.sh中设置更多变量)。 Dockerfile中只有ENV个条目(以及像--rcfile这样的泊坞窗选项可以改变环境。)

当然,您也可以决定从image_env_setup.sh获取.bashrc

例如,您可以预先制作.bashrc并使用COPY将其拉入,或者执行

RUN echo '. /opt/MyCode/image_env_setup.sh' >> ~/.bashrc

答案 1 :(得分:0)

你可以将/opt/MyCode/image_env_setup.sh放在容器的〜/ .bash_profile或〜/ .bashrc中,以便每次进入容器时都有env的设置