从 Docker 进程内部在主机上运行 Runtime.getRuntime().exec

Nik*_* I. 5 java docker

我有一个在 Docker 容器内运行的 Java 程序。该程序需要执行一个应由主机系统运行的 shell 命令,但只需调用即可Runtime.getRuntime().exec(...)在 Docker 容器内执行它(理应如此)。

有没有办法可以从容器内部启动进程,以便该进程在外部运行?我怀疑 exec 命令应该通过 Docker 告诉它该命令本身需要在主机上运行,​​但我不知道该怎么做。

Ily*_*iev 0

如何做到这一点的想法可以基于 docker 命令行客户端与 docker 服务的通信方式。它只是一个客户端,使用 unix 套接字(即只是文件)将命令流式传输到服务。因此,您可以通过 tcp 连接 1)主机上的服务(google for docker TCP socket)2)可以使用 docker 实用程序创建 docker 主机卷,以使它们在 docker 容器上可用,就像在 Ubuntu 上运行的 docker 的那些参数一样

-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/lib/x86_64-linux-gnu/libltdl.so .7:/usr/lib/x86_64-linux-gnu/libltdl.so.7

这使您可以在容器中执行 docker 实用程序,实际上所有命令都将在主机服务中完成