当前位置: 首页 > 知识库问答 >
问题:

如何使用Java Jsch运行特定于Docker的命令

黄弘深
2023-03-14

我尝试在java中执行以下步骤
1。ssh到远程机器(使用jsch完成),如下所示。

import java.io.InputStream;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class JSchExampleSSHConnection {
public static void main(String[] args) {
    String host="hostname";
    String user="sshuser";
    String password="sshpwd";
    String command1="ls";
    try{

        java.util.Properties config = new java.util.Properties(); 
        config.put("StrictHostKeyChecking", "no");
        JSch jsch = new JSch();
        Session session=jsch.getSession(user, host, 22);
        session.setPassword(password);
        session.setConfig(config);
        session.connect();
        System.out.println("Connected");

        Channel channel=session.openChannel("exec");
        ((ChannelExec)channel).setCommand(command1);
        channel.setInputStream(null);
        ((ChannelExec)channel).setErrStream(System.err);

        InputStream in=channel.getInputStream();
        channel.connect();
        byte[] tmp=new byte[1024];
        while(true){
          while(in.available()>0){
            int i=in.read(tmp, 0, 1024);
            if(i<0)break;
            System.out.print(new String(tmp, 0, i));
          }
          if(channel.isClosed()){
            System.out.println("exit-status: "+channel.getExitStatus());
            break;
          }
          try{Thread.sleep(1000);}catch(Exception ee){}
        }
        channel.disconnect();
        session.disconnect();
        System.out.println("DONE");
    }catch(Exception e){
        e.printStackTrace();
    }

}
}

无法继续下一步

我尝试了以下步骤来实现第3步和第4步。尝试运行时。getRuntime()。执行官(“docker exec

共有1个答案

齐献
2023-03-14

通过以下方式分配伪终端:

channel.setPty(true);

用于在docker运行容器内执行命令,如:

docker exec -it <container-name> <command>
 类似资料:
  • 我想在Linux上运行SSH命令来启动/停止带有Laravel特使的服务器。但是,对于SSH::into()的语法,我得到了一个错误。我不知道该怎么办完全卡住了。我们需要一种方法来解决这个问题,让它发挥作用。特使设置并与“php artisan”命令配合使用: 命令:特使运行foo--user=root--host=94.130.97.242 这就是我为SSH::into()启动/停止服务器所做的

  • 我需要用docker exec运行2个命令。我正在从docker容器中复制一个文件,不想处理凭据来使用像ssh这样的东西。此命令复制一个文件: 但它会创建一个子目录var/log,我想避免这种情况,所以如果我可以在docker容器中执行这些操作,我应该很好: 如何让docker exec运行2个命令?

  • 有没有办法从 Windows 命令行检查特定端口的状态?我知道我可以使用netstat来检查所有端口,但netstat很慢,查看特定端口可能不是。

  • 问题内容: 我有3个python版本,我想使用第二个版本来easy_install Orange。我怎样才能做到这一点? 不必要的信息: 在/ usr / bin / python中的2.1 2.6在/Library/Frameworks/Python.framework/Versions/2.6/bin/python中 /Library/Frameworks/Python.framework/V

  • 问题内容: 我可以使用它来获取命令的输出,该命令将在与可执行位置相同的路径中运行。 如何指定要在哪个文件夹中运行命令? 问题答案: 返回一个type值。是一个struct并具有一个字段: 因此,只需在调用之前进行设置: 另请注意,这特定于命令;允许您使用该标志传递路径,因此您也可以这样操作:

  • 问题内容: 我使用第三方GUI(Synology Docker软件包)来设置Docker容器。但是,它的局限性使我需要从命令行运行容器。(我想映射另一个主机IP绑定端口) 现在,由于已经完成了许多设置,因此我想检索启动该容器的原始运行命令,然后可以将端口映射端口更改为新端口。例如。“ ” 我找不到这样做的方法,事件使用“ docker inspect”,没有提供此类信息。 请提供一些建议以解决此问