思路

我们可以通过在容器内远程连接宿主机,然后对宿主机进行操作。

使用 sshpass (我的是CentOS 7.9环境)

1.安装sshpass

apt-get update //更新一下
apt-get -y install sshpass //安装 

2.连接宿主机执行命令

 sshpass -p '宿主机用户密码' ssh -o StrictHostKeyChecking=no -p 22 用户名@宿主机ip 命令
 列如:
  注意:这是在容器中运行的,查出了宿主机的ip配置信息。
  sshpass -p 'abc@1234' ssh -o StrictHostKeyChecking=no -p 22 tmsceshi@10.73.100.6 ifconfig 
  

在这里插入图片描述

3.连接执行宿主机的脚本

vim hello.sh //在宿主机建一个脚本文件

脚本内容
#!/bin/bash
echo "hello woshikunkun"

 注意:这是在容器中运行的,执行了宿主机的脚本。
  sshpass -p 'abc@1234' ssh -o StrictHostKeyChecking=no -p 22 tmsceshi@10.73.100.6 sh hello.sh

在这里插入图片描述

4.当然也可以自动化,比如:java项目部署在docker容器内,然后java项目在某一时刻执行宿主机的脚本或者宿主机的命令

注意: 要先安装 sshpass命令才行。 Dockerfile文件可以在你部署容器的时候自动安装。
docker部署springboot项目


Runtime rt = Runtime.getRuntime();

//执行 ifconfig -a 命令,查询宿主机的ip配置
String[] shell = {"/bin/bash", "-c", "sshpass -p 'abc@1234' ssh -o StrictHostKeyChecking=no -p 22 tmsceshi@10.73.100.6 ifconfig -a "};

//执行hello.sh 脚本
String[] shell = {"/bin/bash", "-c", "sshpass -p 'abc@1234' ssh -o StrictHostKeyChecking=no -p 22 tmsceshi@10.73.100.6 sh hello.sh "};
Process exec = Runtime.getRuntime().exec(shell);
BufferedReader in = null;
try {
    in = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String str = null;
    String[] strArray = null;
    //逐一对每行内容进行操作
    while ((str = in.readLine()) != null) {
    	System.out.println(str);
    }
} catch (Exception e) {
    System.out.println(e);
} finally {
    in.close();
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐