【问题标题】:How To run from host machine bash script inside docker container and remain in bash in container [duplicate]如何从docker容器内的主机bash脚本运行并保留在容器中的bash中[重复]
【发布时间】:2017-01-12 10:34:21
【问题描述】:

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

我正在自动化一堆 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 提示。

如何在一行中实现?

附:同时,从这里使用 cmets 我已经尝试过:

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 无关时,它被标记为重复
  • 这个问题不是重复的,知道答案实际上会很有帮助,因为其他解决方案似乎不适用于 Docker。

标签: linux bash docker


【解决方案1】:

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

【讨论】:

  • OP 在docker exec 上使用-ti 标志,因此它分配了一个tty 并以交互方式运行。因此,虽然您的第一个陈述是正确的,但它不适用于这种情况。
  • 是的,它适用。正如你所说,-it 分配一个 tty 并允许与它进行交互,但这并不意味着在命令完成后该进程将被维护(通过运行基本的 ubuntu 容器尝试它,它将在命令运行良好后退出执行)
  • 进程没有被维护的原因是因为使用了错误的 bash 命令。使用 OPs bash 命令具有相同的行为,无论它是否通过 docker 运行,即它在命令运行后立即退出
  • 我真的不明白你的意思。 (我对linux系统不是很了解)。尽管我在问题的评论中阅读了您过去的问题,但它比我的答案更好^^
  • 错误。如果我将它添加到 dockerfile,然后手动运行它,那与我现在正在做的完全没有区别。 :) 这么说好像没有办法轻松设置这些东西?
猜你喜欢
  • 1970-01-01
  • 2017-02-21
  • 2017-12-01
  • 2021-09-16
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
相关资源
最近更新 更多