Linux 如何在docker容器中从主机运行bash脚本并保持在bash容器中

Linux 如何在docker容器中从主机运行bash脚本并保持在bash容器中,linux,bash,docker,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 ex

我正在尝试自动化一些应该是相当简单的任务,但我找不到正确的标志/方法来完成它

我正在自动化一堆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 
这让我进入容器狂欢,然后:

export PS1="\e[1;32m[\u@ \\H \\W \\@]\$ \e[m "
给了我想要的。Bash提示符,具有可见的容器名称和与主机不同的颜色

如何在一条生产线内实现这一点

顺便说一下,在此期间,我用这里的评论尝试了以下方法:

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 ")

sudo docker exec-ti igorDebian72 bash--rcfile该
docker exec
命令的目的是将进程运行到容器中,然后在进程完成时退出

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

在第二个示例中,您运行的是
/bin/bash
,只有在关闭终端时才会退出。你不能在同一条线上同时做这两件事。您可以做的是:

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

  • 然后使用
    docker exec/bin/bash进入容器并手动运行命令


docker exec
命令的目的是在容器中运行进程,然后在进程完成时退出

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

在第二个示例中,您运行的是
/bin/bash
,只有在关闭终端时才会退出。你不能在同一条线上同时做这两件事。您可以做的是:

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

  • 然后使用
    docker exec/bin/bash进入容器并手动运行命令


OP正在使用
docker exec
上的
-ti
标志,因此它会分配一个tty并以交互方式运行。所以,虽然你的第一句话是正确的,但它不适用于本案。是的,它适用于本案。正如您所说,
-it
分配一个tty并允许与之交互,但这并不意味着该进程将在命令完成后得到维护(通过运行基本的ubuntu容器来尝试,它将在命令执行良好后退出)。该进程未得到维护的原因是因为使用了错误的bash命令。无论是否通过docker运行,使用OPs bash命令都具有相同的行为,即,它在命令运行后立即退出。我真的不明白您的意思。(我对linux系统不是很了解)。虽然我在问题的评论中读到了你过去的问题,但这是一个比我的更好的答案。如果我将它添加到dockerfile中,然后手动运行它,这与我现在所做的没有任何区别。:)因此,似乎没有办法轻松设置这些内容?OP正在使用
docker exec
上的
-ti
标志,因此它分配tty并以交互方式运行。所以,虽然你的第一句话是正确的,但它不适用于本案。是的,它适用于本案。正如您所说,
-it
分配一个tty并允许与之交互,但这并不意味着该进程将在命令完成后得到维护(通过运行基本的ubuntu容器来尝试,它将在命令执行良好后退出)。该进程未得到维护的原因是因为使用了错误的bash命令。无论是否通过docker运行,使用OPs bash命令都具有相同的行为,即,它在命令运行后立即退出。我真的不明白您的意思。(我对linux系统不是很了解)。虽然我在问题的评论中读到了你过去的问题,但这是一个比我的更好的答案。如果我将它添加到dockerfile中,然后手动运行它,这与我现在所做的没有任何区别。:)所以,似乎没有办法轻松地设置这些内容?很惊讶,当现有问题与Docker无关时,这个问题被标记为重复问题。这个问题不是重复问题,知道它的答案会非常有帮助,因为另一个解决方案似乎不适用于Docker。令人惊讶的是,当现有问题与Docker无关时,此问题被标记为重复。此问题不是重复问题,了解其答案将非常有用,因为另一个解决方案似乎不适用于Docker。
sudo docker exec -ti igorDebian72 bash --rcfile <(echo trueColors.sh)