这有效:
# 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:/#
问题:我怎样才能source
一个文件进入shell? (这不起作用)
$ docker run -i -t image /bin/bash -c "source <(curl -Ls git.io/apeepg) && /bin/bash"
# content from http://git.io/apeepg is sourced and shell is returned
root@4c064f2554de:/#
答案 0 :(得分:4)
就我而言,我在Dockerfile中使用RUN source
命令(将使用/ 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
答案 1 :(得分:1)
我想要类似的东西,并在你的想法上稍微扩展一下,想出了以下内容:
docker run -ti --rm ubuntu \
bash -c 'exec /bin/bash --rcfile /dev/fd/1001 \
1002<&0 \
<<<$(echo PS1=it_worked: ) \
1001<&0 \
0<&1002'
--rcfile /dev/fd/1001
将使用该文件描述符的内容而不是.bashrc 1002<&0
保存标准输入法<<<$(echo PS1=it_worked: )
将PS1=it_worked:
置于stdin 1001<&0
将此stdin移动到fd 1001,我们将其用作rcfile 0<&1002
恢复我们最初保存的标准输入答案 2 :(得分:1)
您可以在互动容器中使用.bashrc
:
RUN curl -O git.io/apeepg.sh && \
echo 'source apeepg.sh' >> ~/.bashrc
然后像docker run -it --rm some/image bash
一样照常运行。
请注意,仅可以使用交互式容器。
答案 3 :(得分:-2)
我认为你不能这样做,至少现在不行。你可以做的是修改你的图像,并添加你想要的文件,如:
FROM image
ADD my-file /my-file
RUN ["source", "/my-file", "&&", "/bin/bash"]