使用当前用户在 Docker 中获取 /root/.zshrc

使用当前用户在 Docker 中获取 /root/.zshrc

我正在尝试为 root 用户构建容器,然后使用我的用户运行它并/root/.zshrc从内部获取。

这是一个最小的例子:

FROM ubuntu:20.04

RUN apt update 
RUN apt install --assume-yes --fix-broken \
    curl \
    wget \
    zsh

RUN echo EDITOR=vim >> /root/.zshrc

RUN chmod a+rx /root
CMD [ "source /root/.zshrc", "zsh"]

调用如下:

docker run --rm -it -v "$HOME/.ssh:$HOME/.ssh:ro" -v "$HOME/.netrc:$HOME/.netrc:ro" -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro --user $UID:$UID foo_minimal

我收到的错误是:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"source /root/.zshrc\": stat source /root/.zshrc: no such file or directory": unknown.

这里可能有什么问题?

答案1

如果您想继续使用原来的方法,并且您只是想更新zsh登录时获取的文件,则可以附加到/etc/zsh/zshrc

RUN echo EDITOR=vim >> /etc/zsh/zshrc

然后,无论用户运行该容器,它都会自动获取该文件。

答案2

如果用户有用户名和 shell RC 文件,您可以考虑将其创建为 Dockerfile 的一部分:

FROM ubuntu:20.04

RUN apt update && \
    apt install --assume-yes --fix-broken \
    curl \
    wget \
    zsh

RUN groupadd -g 1000 bob && \
    useradd -m --uid 1000 --gid 1000 -s /bin/zsh bob && \
    echo EDITOR=vim >> /home/bob/.zshrc

CMD [ "zsh" ]

bob在这里,我添加了一个名为gid 1000 的组和一个名为bobuid 1000 的用户(您可以更改bob为与 uid 1000 关联的任何名称。

然后,您可以写入该用户~/.zshrc而不是/root/.zshrc

答案3

我让它运行起来:

创建一个名为 .zshrc 的文件 source /root/.zshrc 并将其安装在用户主目录中:

~/git/docker/base-ubuntu-20.04/test-delete(allow_multiuser*) » cat .zshrc                                                                                                         mihai@mihai-pc 17/10/20 21:07:24
#!/bin/zsh

source /root/.zshrc

进而:

~/git/docker/base-ubuntu-20.04/test-delete(allow_multiuser*) » docker run -it -v "$HOME/.ssh:$HOME/.ssh:ro" -v "$HOME/.netrc:$HOME/.netrc:ro" -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro --user $UID:$UID --env "$USER=$USER" -v $(realpath .zshrc):/home/$USER/.zshrc foo_minimal /bin/zsh          

df45e8b82593% echo $EDITOR
vim

您觉得这个解决方案怎么样?

相关内容