如何在Docker Container中设置PS1

时间:2014-11-01 18:53:00

标签: docker dockerhub

我想将$ PS1环境变量设置为容器。它帮助我识别多级或复杂的docker环境设置。目前docker容器提示

root @ container-id#

如果我可以按照以下方式更改它,我可以通过查看$ PS1提示本身来识别容器。

[Level-1] root @ container-id#

我通过制作我自己的图像(Dockerfile),.profile文件等来导出$ PS1进行了实验。但它没有反映出来。

9 个答案:

答案 0 :(得分:2)

Dockerfile通过以下方式设置PS1

RUN echo 'export PS1="[\u@docker] \W # "' >> /root/.bash_profile

答案 1 :(得分:1)

我通常创建/home/USER/.bashrc或/root/.bashrc,具体取决于Dockerfile的用户是谁。这很好用。我试过了

ENV PS1 '# ' 

但这对我没用。

答案 2 :(得分:1)

我们使用类似的技术来跟踪复杂容器构建中的输入和输出。

https://github.com/ianmiell/shutit/blob/master/shutit_global.py#L1338

这一行代表了处理docker /(p)期望组合的来之不易的经验的产物:

"SHUTIT_BACKUP_PS1_%s=$PS1 && PS1='%s' && unset PROMPT_COMMAND"

如果你想要恢复,备份提示是很方便的,设置PS1时PS1 =设置PS1,并且取消设置PROMPT_COMMAND会删除任何令人讨厌的意外,终端被重置等等。期待。

如果问题是关于如何确保在运行容器时设置(而不是构建),那么您可能需要根据容器的运行方式向.bashrc / .profile文件添加内容。据我所知,没有办法用dockerfile指令来确保它并使其保持不变。

答案 3 :(得分:1)

docker-compose上下文中,我遇到了同样的问题。
这是我设法使其工作的方式:

# docker-compose.yml

version: '3'
services:
  my_service:
    image: my/image
    environment:
      - "PS1=$$(whoami):$$(pwd) $$ "

只需将PS1值作为环境变量传递到docker-compose.yml配置文件中。
注意如何需要转义美元符号以防止docker-compose插值(documentation)。

答案 4 :(得分:1)

尝试使用 docker 选项设置环境变量

示例:

docker run \
  -ti \
  --rm \
  --name ansibleserver-debug \
  -w /githome/axel-ansible/ \
  -v /home/lordjea/githome/:/githome/ \
  -e "PS1=DEBUG$(pwd)# " \
  lordjea/priv:311 bash
docker --help

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
Options:
...
  -e, --env list                       Set environment variables
...

答案 5 :(得分:0)

您应该在.profile中设置,而不是.bashrc

只需从您的根或家中打开.profile,然后将PS1='\u@\h:\w\$ '替换为PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '或您想要的任何内容。

请注意,您需要重新启动容器。

答案 6 :(得分:0)

以下是运行容器时设置PS1的方法:

docker run -it \
  python:latest \
  bash -c "echo \"export PS1='[python:latest] \w$ '\" >> ~/.bashrc && bash"

我制作了一个小包装脚本,以便能够使用我的自定义提示运行任何图像:

#!/usr/bin/env bash
# ~/bin/docker-run

set -eu

image=$1

docker run -it \
  -v $(pwd):/opt/app
  -w /opt/app ${image} \
  bash -c "echo \"export PS1='[${image}] \w$ '\" >> ~/.bashrc && bash"

答案 7 :(得分:0)

在debian 9中,为了运行bash,它起作用了:

RUN echo 'export PS1="[\$ENV_VAR] \W # "' >> /root/.bashrc

它通常以root身份运行,而且我通常知道我在docker中,因此我想获得一个提示,指出容器是什么,所以我使用了一个环境变量。而且我想我会优先使用bash加载bash。

答案 8 :(得分:0)

在我的MAC上,我有一个名为lxsh的别名,它将使用当前目录(details)中的ubuntu映像启动bash shell。为了更改shell的提示,我在/root/.bash_aliases上安装了一个主机文件。这是一个肮脏的hack,但是它可以工作。完整的别名:

alias lxsh='echo "export PS1=\"lxsh[\[$(tput bold)\]\t\[$(tput sgr0)\]\w]\\$\[$(tput sgr0)\] \"" > $TMPDIR/a5ad217e-0f2b-471e-a9f0-a49c4ae73668 && docker run --rm --name lxsh -v $TMPDIR/a5ad217e-0f2b-471e-a9f0-a49c4ae73668:/root/.bash_aliases -v $PWD:$PWD -w $PWD -it ubuntu'