如何从 Java 项目 运行 Docker 容器?

How to run Docker container from Java project?

如何从 java 代码 运行 一个 docker 容器?我正在尝试使用 docker 创建一个 SaaS,一旦用户登录,我应该从 java 代码启动一个 memcached 容器,这个解决方案不起作用:

Process p = Runtime.getRuntime().exec("docker images");

Docker cmd 运行 通常在 git bash 上,而不是在 cmd.
上 PS:我在 windows.

上使用 docker

我假设您正在使用 Docker Toolbox for Windows。

docker命令不带大写D。也许试试

Process p = Runtime.getRuntime().exec("docker images");

但是您可能 运行在 Windows 上使用此代码,无论如何它都可以工作。

另一件需要考虑的事情是 DOCKER_HOST 环境变量的值,必须相应地设置它以指示 docker 客户端如何与 docker 引擎通信。

在您的情况下,docker 客户端在 Windows 上 运行,而 docker 引擎 运行 位于 VirtualBox 中的虚拟机中。

Runtime.getRuntime().exec()提供的shell不会设置DOCKER_HOST环境变量。

另一种方法是使用 --host-H docker 客户端选项来指定如何连接到您的 docker 引擎:

Process p = Runtime.getRuntime().exec("docker --host=tcp://<some IP>:2376 images");

对不起各位,当我打开一个新的 shell(客户端)时,我必须配置它才能知道如何连接到 docker 守护程序 [=28] =] 在 vi​​rtualbox 中。我必须 运行 设置 shell 环境的命令,因为快速启动终端会自动执行它。所以我不得不 运行 以下内容,然后将输出粘贴回我的 cmd shell:

docker-machine env --shell cmd default

现在完美运行了。

更新(感谢@thaJeztah):最好使用 Java 库直接连接到 docker 守护进程。
Link 至 API https://docs.docker.com/engine/reference/api/remote_api_client_libraries/

您可以使用 https://github.com/docker-java/docker-java 来完成。它允许您构建自定义图像并 运行 它来自 java