如何在Docker中使用.bashrc for root

Mat*_*bst 23 .bash-profile docker

我想在root(centos:6)Docker容器中给我的root用户a .bashrc.但是,当我运行我的容器时,我发现.bashrc它还没有来源.可以这样做吗?

我的构建命令:

...
RUN touch .bashrc
RUN echo "iptables -t nat -A OUTPUT -d hostA -p tcp --dport 3306 -j DNAT --to hostB" >> .bashrc
...
Run Code Online (Sandbox Code Playgroud)

我的运行命令:

docker run -it --cap-add=NET_ADMIN myImage /bin/bash
Run Code Online (Sandbox Code Playgroud)

Mat*_*bst 23

结果我错误地添加了文件.应该/root/.bashrc而不仅仅是.bashrc.将文件添加到正确的位置,不需要运行命令或CMD.

建立

...
ADD iptables /iptables
RUN touch /root/.bashrc \
 && cat iptables >> /root/.bashrc
...
Run Code Online (Sandbox Code Playgroud)

docker run -it --cap-add=NET_ADMIN myImage /bin/bash
Run Code Online (Sandbox Code Playgroud)

  • 你不需要`touch`,因为`>>`会创建文件,如果它不存在. (7认同)

use*_*247 6

bash的手册页,各国.bashrc当shell是交互式的阅读。因此,如果您想要一个读取 .bash 的 bash .bashrc,您需要使用 .bashrc 启动 bash -i

看到:

root@host:~# echo 'echo this is .bashrc' > /tmp/bashrc
root@host:~# docker run -ti -v /tmp/bashrc:/root/.bashrc debian bash -i 
this is .bashrc
root@01da3a7e9594:/#
Run Code Online (Sandbox Code Playgroud)

但是,bash -i在容器中像这样执行会覆盖入口点或 cmd,因此您最好将 iptables 命令和您最初使用的入口点包装在成为您的入口点 / cmd 的 shell 脚本中。