我想将$ PS1环境变量设置为容器。它帮助我识别多级或复杂的docker环境设置。目前docker容器提示
root @ container-id#
如果我可以按照以下方式更改它,我可以通过查看$ PS1提示本身来识别容器。
[Level-1] root @ container-id#
我通过制作我自己的图像(Dockerfile),.profile文件等来导出$ PS1进行了实验。但它没有反映出来。
答案 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'