docker容器内使用容器外的shell脚本

使用场景:需要使用java来执行某个脚本,对容器外的某个文件进行操作,把这个文件发送到另外一个服务器上面去

为什么写这篇博客呢?

因为在CSDN上看了很多博客,发现大部分都是容器外使用容器内的操作,所以当我找到解决方法的时候,就顺便发了出来。

其实我这个方法其实不是像标题说的一样,在容器内使用容器外的shell脚本

首先介绍我会遇到的问题

第一个问题: 如何解决在容器内使用容器外的脚本问题(难)

第二个问题: 如何在JAVA里面使用SHELL脚本(易)

第三个问题:如何免密发送文件到另一台服务器上(难)

对于这个三个问题,由于我刚出来工作不久,经验不深,所以很多在大佬眼里看似简单的问题,在我看来很麻烦。

  • 我查了很多博客,都没有查到如何在docker容器内执行容器外脚本的方法,如果有大佬知道,麻烦在评论区留下您好心的链接
  • 所以我选择了在容器内使用SSH登录当前服务器,使用GitHub上的开源:SSH-client-pool,通过这个来使用SSH登录服务器,执行脚本
SshClientConfig clientConfig = new SshClientConfig(ip,22,username,password,null);
SshClientWrapper client = pool.client(clientConfig);
client.executeCommand("sh xxx.sh",100);
  • 但是也因此有了第三个问题,脚本里使用scp发送指令,需要手动输入登录密码。经过一番资料的查找,我使用了expect指令,把sh换成expect脚本。
  • 以下是我的脚本分享:
  • 如果执行不成功,有以下两个原因
  • 1.没有装expect指令,这个可以通过 yum install -y expect 来安装即可
  • 2.使用方法/传递参数传递不对,使用该脚本指令为: expect xxxx.sh [传参1] [传参2] [传参3] [传参4]
  • 脚本作用:使用SSH连接服务器时,不必手动输入账号密码
#!/usr/bin/expect -f
# 如果执行不成功,有以下两个原因
# 1.没有装expect指令,这个可以通过 yum install -y expect 来安装即可
# 2.使用方法/传递参数传递不对,使用该脚本指令为:  expect xxxx.sh [传参1] [传参2] [传参3] [传参4]
# 使用scp上传
set fileName [lindex $argv 0]
set savePath [lindex $argv 1]
set tohost [lindex $argv 2]
set basePath [lindex $argv 3]
spawn  bash -c "scp -r $savePath$fileName  root01@$tohost:$basePath"
#等待带有password字样,并输入密码
expect "*password*" {send "XXXXXXX\r"}
#退出
expect eof
#ssh连接服务器
spawn ssh root01@$tohost
#等待带有password字样,并输入密码
expect "*password*" {send "XXXXXXX\r"}
#执行命令
expect "*01@ubuntu*" {
    send "cd $basePath  \r"
    send "chmod 777 $fileName \r"
    send "unzip -o $fileName -d data  \r"       
}
#退出
expect eof
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值