请有人告诉我如何从java代码运行一个docker容器,我正在尝试使用docker制作一个SaaS,一旦用户登录,我应该从java代码启动一个memcached容器,这个解决方案不会工作:
Process p = Runtime.getRuntime().exec("docker images");
Docker cmds通常在git bash上运行,而不是在cmd上运行 PS:我在 windows 上使用了docker。
谢谢。
答案 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运行它