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

时间:2016-01-10 14:35:29

标签: java docker saas git-bash

请有人告诉我如何从java代码运行一个docker容器,我正在尝试使用docker制作一个SaaS,一旦用户登录,我应该从java代码启动一个memcached容器,这个解决方案不会工作:

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

Docker cmds通常在git bash上运行,而不是在cmd上运行 PS:我在 windows 上使用了docker。

谢谢。

3 个答案:

答案 0 :(得分:1)

我假设您使用的是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 client选项指定如何连接到docker引擎:

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

答案 1 :(得分:1)

我很抱歉,当我打开一个新的shell(客户端)时,我必须配置它以便知道如何连接到在virtualbox中运行的docker守护进程。我必须运行设置shell环境的cmds,因为quickstart终端会自动执行。所以我必须运行以下内容然后将输出粘贴回我的cmd shell:

{{1}}

现在它完美无缺。

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

答案 2 :(得分:1)

您可以使用https://github.com/docker-java/docker-java进行操作。它允许您构建自定义图像并从Java运行它