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

时间:2018-03-28 21:08:16

标签: docker

这是我的情景。

我有2个Docker容器:

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

技术上是的,但这可能不是你想要做的。

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

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