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

标签 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 提示符。

如何在一行中实现这一点?

附言与此同时,我使用这里的评论尝试了这个:

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)

再次,保留在容器中,但不运行脚本。

最佳答案

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

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

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

  • PS1=.... 作为 ENV PS1\e.... 放入 dockerfile 这样环境运行容器时已经设置了变量

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

关于linux - 如何从 docker 容器内的主机 bash 脚本运行并保留在容器中的 bash 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41610878/

相关文章:

bash - 重定向 ${var :? } 构造中的标准错误

bash - 是否可以从外部完成命令动态修改 compopts?

wordpress - WordPress关于Docker swarm插件的问题吗?

docker - 如何修复 : yum install with error in docker container?

java - SAS 安装因未找到 libXext 而失败

linux - 有没有办法合并文本文件中相似(但不相同)的行?

linux - 在 LAMP 堆栈中重命名本地主机 127.0.0.1

linux - 如何在独立cgroup中从systemd服务运行外部程序

c - 如何在最小的 linux 内核环境中启动进程?

Azure Web App for Containers 中跨订阅的 Azure 容器注册表