docker exec 交互式 bash 与 init 命令

ss2*_*s2k 5 bash docker

为了调试,我想跳入我拥有的任何 docker 容器,并立即在我的交互式 bash shell 上设置一些细节。出于某种原因,下面的 --init-file 样式现在正在工作。

与许多事情一样,我想这是我遗漏的某种转义序列问题。有什么建议?

docker exec -it mycontainer bash --init-file <(echo "PS1='\w\$ '; TERM=xterm256; alias ls='ls -GFh'")
Run Code Online (Sandbox Code Playgroud)

--init-file 中的任何命令都不会应用于在容器中启动的 bash shell。

小智 1

给定文件中的 bash 配置my-bash-niceties

#my-bash-niceties
PS1='\w\$ '
TERM=xterm256
别名 ll='ls -GFh'

选项1

一种可能性是将 bash 配置文件安装到容器中......

docker run --detach -it -v `pwd`/my-bash-niceties:/etc/bashrc --name mycontainer bash:4.0
Run Code Online (Sandbox Code Playgroud)

...并使用它作为 init 文件调用 bash。

docker exec -it  mycontainer bash  --init-file /etc/bashrc
Run Code Online (Sandbox Code Playgroud)

选项2

另一种选择是将 bash 配置文件安装为~/.bashrc...

docker run --detach -it -v `pwd`/my-bash-niceties:/root/.bashrc --name mycontainer bash:4.0
Run Code Online (Sandbox Code Playgroud)

...然后在容器中执行 bash 。

docker exec -it  mycontainer bash
Run Code Online (Sandbox Code Playgroud)

理论上,第三个(也是最好的!)选项只是将 bash 配置文件安装为 /etc/profile.d/my_bash_rc.sh (任何 .sh 文件都可以),但我不知道为什么这个容器不这样做遵守这一公约。:(

顺便说一句,选项 --init-file 指的是容器文件系统内的文件。