我的主机上的 shell(带有我的自定义)可以与 docker 实例一起使用吗?

我的主机上的 shell(带有我的自定义)可以与 docker 实例一起使用吗?

通常,如果您通过连接到 docker 实例,docker exec您会进入类似sh或 之类的非常原始的东西ash

如果你想要更好的东西,你必须自己在 docker 实例上安装它。

然而,如果我看对了——我想要从 shell 中得到的只是执行二进制文件,并可能重定向 stdin 和 stdout。 shell 是否不可能存在于我的主机上,具有pwddocker 容器的权限,并且可以访问 docker 容器和我的主机的二进制文件?

这纯粹是为了开发/调试,所以如果我必须禁用安全功能来实现这一点,这是可以接受的。

这很容易做到吗?如果没有,那么主要障碍是什么?

答案1

如果我正确理解你的问题,那么你想要在 docker 容器中使用与主机系统中相同的 shell 和相同的配置。

你确实可以通过使用体积来耦合它们,但是要使其 100% 正确地工作将是困难和混乱的。我强烈建议安装它并从您的主机复制配置。

假设您的主机上用作shell,并且您想要使用从基于 ubuntu 的bash映像创建的容器。foo:latest

在这种情况下,您可以创建以下内容Dockerfile

FROM foo:latest
RUN apt-get update && apt-get -y install bash
COPY .bashrc /root/.bashrc
COPY .profile /root/.profile

现在:

  • 创建一个目录newimage
  • .bashrc将并从您的 homedir复制.profile到此目录
  • 转到这个目录并运行docker build -t foo:withbash

现在您将拥有一个foo:withbash与 bash 相同的映像foo:latest,但它也将在您的主机系统上具有 bash 的配置。

(同样的技巧可以用于zsh其他 shell 和 centos 以及其他发行版,但 Dockerfile 中的命令会略有不同)

编辑: 一些注意事项:

  • 在我的 dockerfile 中,我假设您将是容器中的 root(通常是这种情况)。如果您不是此容器的 root 用户,您可能需要更改最后两行,以便将这些文件复制到正确的目录。
  • 第二行适用于所有基于 debian、ubuntu 或类似发行版的 dockerimage。
    如果它基于 CentOS 或类似的发行版,您会想要:yum -y update && yum -y install bash
    如果它基于 Alpine,您会想要RUN apk add --no-cache bash
  • 如果你想将 zsh 更改bashzsh 第 2 行和第 3 行

相关内容