如何从docker容器内的主机bash脚本运行并保留在容器中的bash中

时间:2017-01-12 10:34:22

标签: linux bash docker

我试图自动完成一项应该是一项相当简单的任务,但我无法找到合适的标志/方法。

我自动化了一堆docker容器,我想知道我以某种人类可读的形式使用哪个shell。

所以,我开始/创建一个容器:

docker run -v /home/igor/Downloads:/home/Downloads/ -h debian7 -p 8081:8080 -itd --name igorDebian72 debian:7

然后尝试进入它已经很好地改变了提示和颜色的bash:

sudo docker exec -ti igorDebian72 /bin/bash -c "`export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m "`"

但是,这似乎"运行"命令并退回到主机,因此它没用。

如果我分开运行这两件事:

sudo docker exec -ti igorDebian72 /bin/bash 

这让我进入容器bash,然后:

export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m "

给我我想要的东西。带有可见容器名称的Bash提示符和与主机不同的颜色。

如何在一条线上实现这一目标?

P.S。在此期间并使用此处的评论,我试过这个:

sudo docker exec -ti igorDebian72 bash --rcfile  <(echo 'export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m "')

sudo docker exec -ti igorDebian72 bash --rcfile  <(export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m ")

它仍然存在于bash中,但似乎脚本没有被执行。

我尝试将其保存在.sh文件中,然后执行此操作:

sudo docker exec -ti igorDebian72 bash --rcfile <(echo trueColors.sh)

同样,保留在容器中,但不运行脚本。

1 个答案:

答案 0 :(得分:0)

docker exec命令旨在将进程运行到容器中,然后在进程完成时退出。

在第一种情况下,您正在运行导入完成后结束的/bin/bash -c 'export ....'。这就是您从终端退出的原因。

在第二个中,您正在运行仅在您关闭终端时退出的/bin/bash。您将无法在同一行中执行这两项操作。你能做的是:

  • PS1=....放入dockerfile作为ENV PS1 \e....,以便在运行容器时设置环境变量

  • 然后使用docker exec /bin/bash to enter the container and run command into it manually