可以从另一个容器在 Docker 容器内运行命令吗?

Iwa*_* B. 5 docker

这是我的场景。

我有 2 个 Docker 容器:

  • C1:是一个带有 Ruby 的容器(但也可以是其他任何东西),用于准备必须使用 Julia 语言执行计算的数据文件
  • C2:是一个装有Julia(或R、或Octave...)的容器,用于执行计算,以避免将Julia安装在运行Ruby代码的同一个系统或容器上

从主机来看,显然我的处理没有问题。通常,当两个容器链接(或属于同一网络)时,它们通过暴露某个门的网络相互通信。在这种情况下,朱莉娅不会暴露任何门。

我可以从 C1 在 C2 上运行类似于主机和 C2 之间执行的命令吗?如果是这样,怎么办?

谢谢!

scn*_*erd 4

从技术上讲是可以的,但这可能不是您想要做的。

Docker CLI 只是 Docker 服务的一个接口,它监听主机上的 /var/run/docker.sock 。任何可以通过 CLI 完成的事情都可以通过直接与该服务器通信来完成。您可以将此套接字作为卷安装到正在运行的容器 (C1) 中,以允许该容器与其主机的 docker 服务进行通信。Docker 有一些需要设置的权限来允许这样做;旧版本允许容器在“特权”模式下运行,在这种情况下,它们可以(除其他外)以主机的权限与 /var/run/docker.sock 进行通信。我相信较新版本的 Docker 将此权限系统进一步拆分,但您必须对此进行研究。在群体模式下进行这项工作也可能会有所不同。在代码级别使用此 API 而不在容器内安装完整的 Docker CLI 当然是可能的(使用库或编写您自己的交互)。JupyterHub+DockerSpawner 是执行此操作的一个有效示例,它有一个特权 Hub 服务器,可为每个登录用户实例化新的 Notebook 容器。

我刚刚看到您明确指出 Julia 容器没有门/接口。您能否将该代码包装在一个更大的容器中,为其提供服务器接口,同时将无服务器 Julia 程序作为同一容器中的“本地”进程进行管理?