docker运行-i-t image/bin/bash-先运行源文件

docker运行-i-t image/bin/bash-先运行源文件,bash,docker,Bash,Docker,这项工作: # echo 1 and exit: $ docker run -i -t image /bin/bash -c "echo 1" 1 # exit # echo 1 and return shell in docker container: $ docker run -i -t image /bin/bash -c "echo 1; /bin/bash" 1 root@4c064f2554de:/# 问题:我怎样才能将文件导入shell?(这不起作用) $docker run

这项工作:

# echo 1 and exit:
$ docker run -i -t image /bin/bash -c "echo 1"
1
# exit

# echo 1 and return shell in docker container:
$ docker run -i -t image /bin/bash -c "echo 1; /bin/bash"
1
root@4c064f2554de:/# 
问题:我怎样才能
将文件导入shell?(这不起作用)


$docker run-i-t image/bin/bash-c”source我认为您不能这样做,至少现在不能。您可以做的是修改您的图像,并添加您想要的源文件,如下所示:

FROM image
ADD my-file /my-file
RUN ["source", "/my-file", "&&", "/bin/bash"]

在我的例子中,我在Dockerfile中使用
runsource
命令(将使用/bin/bash运行)来安装node.js的nvm

这里有一个例子

FROM ubuntu:14.04

RUN rm /bin/sh && ln -s /bin/bash /bin/sh
...
...
RUN source ~/.nvm/nvm.sh && nvm install 0.11.14

我想要一些类似的东西,并对你的想法进行了一些扩展,得出以下结论:

docker run -ti --rm ubuntu \
  bash -c 'exec /bin/bash --rcfile /dev/fd/1001 \
                          1002<&0 \
                          <<<$(echo PS1=it_worked: ) \
                          1001<&0 \
                          0<&1002'
docker运行-ti--rm ubuntu\
bash-c'exec/bin/bash--rcfile/dev/fd/1001\

1002您可以在交互式容器中使用
.bashrc

RUN curl -O git.io/apeepg.sh && \
    echo 'source apeepg.sh' >> ~/.bashrc
然后像往常一样运行
dockerrun-it--rmsome/image bash


请注意,这将仅对交互式容器起作用。

source
是内置的。它不作为
命令存在,因此这只会给出一个错误。这仅在
docker build
期间起作用,并且仅适用于相同的
RUN
指令。当生成的图像延迟时,文件将不会被来源r以分离或交互容器的形式启动。
RUN curl -O git.io/apeepg.sh && \
    echo 'source apeepg.sh' >> ~/.bashrc