如何通过Java程序执行docker命令
我不需要调用Docker远程API,而是需要开发一个与Docker Linux Client(不是Docker守护进程)对话的程序。 这是我的代码
try { String[] command = {"docker", "run", "-it", "tomcat:9", "bash"}; ProcessBuilder pb = new ProcessBuilder(command); pb.inheritIO(); Process proc = pb.start(); InputStream is = proc.getInputStream(); OutputStream os = proc.getOutputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os)); writer.write("pwd"); writer.flush(); String line = ""; while ((line = reader.readLine()) != null) { System.out.print(line + "\n"); } proc.waitFor(); } catch (Exception e) { e.printStackTrace(); }
我总是得到错误。 如果我使用“-it”,它会说“不能在非ttyinput上启用tty模式”,如果我使用“-i”,我将得到一个Stream Closed Exception。
有什么办法可以解决这个问题吗?
为了克服你面临的错误,你应该使用“-i”而不是“-it”。 -t arg告诉docker分配一个伪tty。
public void startContainer(String containerId) throws Exception { final DockerClient docker = DefaultDockerClient.builder() .uri(URI.create("https://192.168.64.3:2376")) .dockerCertificates(new DockerCertificates(Paths.get("/Users/d.romashov/.docker/machine/machines/dinghy"))) .build(); docker.startContainer(containerId); }
如何通过Java程序执行docker命令我不需要调用Docker远程API,而是需要开发一个与Docker Linux Client(不是Docker守护进程)对话的程序。 这是我的代码try { String[] command = {"docker", "run", "-it", "tomcat:9", "bash"}; ProcessBuilder pb = new ProcessBuild...
包括以下服务:
网络-角基于UI,是的NodeJS用作Web服务器
api-基于Spring的应用程序,提供REST api,SpringBoot和绑定到可执行jar的嵌入式Jetty。
db -MongoDB。 基于MongoDB的
Docker
映像,允许配置数据库,用户名和密码以运行
容器
。
安装
docker
-engine和
docker
-compose( )
运行所有服务
$
docker
-compose up -d
仅运行api和db
$
docker
-compose up api -d
Docker
是一种持续性工具,使用
Docker
我们可以将应用程序部署为
使用
docker
映像的
容器
。
容器
包含应用程序代码以及软件,
配置文件,以运行我们的应用程序所需的任何文件。
使用
Docker
file创建
Docker
映像
docker
build -t
docker
handson/spring-boot-mongo .
使用
Docker
Compose部署应用程序
docker
-compose up -d
列出
Docker
容器
docker
ps -a
成功完成构建后,执行以下
命令
以创建
Java
和Mysql服务器
容器
并执行初始库加载:
docker
-compose up --build
从现在开始,您将能够通过端点访问服务。
消耗应用程序服务所需的端点:
创建合作者
POST-
下面是一个示例,其中包含执行JSON调用的字段:
{“ name”:“”,“ email”:“”,“ phone”:“”,“ cpf”:“”,“ sector”:{“ id”:“”}}
列出合作者
带有Spring Boot的Hola
Docker
更新:现在代码使用Spring Boot 2和
Java
10。
该项目向您展示了如何使用单个
Docker
file或将其与
Docker
file
docker
-compose结合使用来对Spring Boot应用程序进行
Docker
file
docker
-compose 。
上的构建代码和了解不同替代方法的指南。
使用
Docker
运行应用程序
确保首先运行以下
命令
来生成.jar文件:
mvn clean package
然后,您只需要执行:
docker
-compose up
请注意,此存储库中有两个
Docker
file。
Docker
file-build不仅可以在
容器
中运行应用程序,还可以使用Maven进行构建。 请查看以获取更多详细信息。
本人在做实验过程中,需要通过
Java
程序部署
docker
容器
。故尝试搜集资料,实现在
Java
端可以操作部署
docker
容器
。过程中遇到一些bug和坑,在此总结,供有需要的童鞋使用。主体配置以Ubuntu16为例。后面会附加给出mac的配置说明。
docker
安装
# 安装
docker
curl -sSL https://get.daocloud.io/
docker
| sh
# 查看是...
1.2、使用交互模式运行:
docker
run -it ubuntu /bin/bash
1.2.1、 指定
容器
的运行名称:
docker
run -it --name yaya ubuntu /bin/bash
1.3、查看当前运行的
容器
:
docker
ps
1.3.1、查看
docker
正在运行和从前运行过的
容器
:
docker
ps -a
1.3.2、查询
docker
最近创建的
容器
:
docker
ps -.
mysql
docker
run -p 3306:3306 --name mysql -v /var/local/mysql/conf:/etc/mysql -v /var/local/mysql/data:/var/lib/mysql -v /var/local/mysql/conf:/etc/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=root -d mysql
redis
docker
run -d --name
在
Java
中获取
Docker
容器
的占用状态,需要使用
Docker
Remote API。你可以使用第三方
Java
库,例如
Docker
Java
库,来简化操作。该库提供了与
Docker
API 的交互,方便获取
容器
的状态信息。你可以通过以下方式使用
Docker
Java
库:
1. 安装
Docker
Java
库:在你的项目中添加以下依赖:
<dependency>
<groupId>com.github.
docker
-
java
</groupId>
<artifactId>
docker
-
java
</artifactId>
<version>3.0.13</version>
</dependency>
2. 连接到
Docker
守护进程:
Docker
Client
docker
Client =
Docker
ClientBuilder.getInstance().build();
3. 获取
容器
列表:
List<Container> containers =
docker
Client.listContainersCmd().exec();
4. 获取
容器
的状态信息:
for (Container container : containers) {
InspectContainerResponse inspectContainerResponse =
docker
Client.inspectContainerCmd(container.getId()).exec();
String state = inspectContainerResponse.getState().getStatus();
System.out.println("Container ID: " + container.getId() + " State: " + state);
这样就可以在
Java
代码中获取
Docker
容器
的占用状态了。