java - 如何使用 Docker 在 Linux 中更改目录

标签 java linux docker

我的代码可以正常工作,但我无法使用命令更改目录。我可以 ls、touch 等...但我不能 cd。

在这种情况下,message 是我想要的命令。例如:ls

此修复程序是什么?

public static String getDockerConsole(String containerName, String message) {
    String[] cmd = new String[]{
            "/bin/sh",
            "-c",
            message
    };
    DockerClient dockerClient = dockerClient();
    Container container = getContainer(containerName);
    ExecCreateCmdResponse execCreateCmdResponse = dockerClient.execCreateCmd(container.getId()).withAttachStdout(true).withTty(true).withAttachStderr(true).withCmd(cmd).withUser("root").exec();
    ByteArrayOutputStream  out = new ByteArrayOutputStream();
    ByteArrayOutputStream err = new ByteArrayOutputStream();

    try {
        dockerClient.execStartCmd(container.getId()).withExecId(execCreateCmdResponse.getId()).withTty(true).exec(new ExecStartResultCallback(out, err)).awaitCompletion();

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return out.toString() + err.toString();

最佳答案

当执行 ExecCreateCmdResponse 并显示消息“cd folder”时,会创建一个连接到 tty 的进程,该进程会执行 sh 并对新文件夹进行更改,但它会终止。当它结束时,如果您再次运行,sh 将返回到主文件夹。

例如尝试在同一个命令 sh 进程中使用 cd 和 ls:

message = "cd /bin; ls ; cd /var; ls"

关于java - 如何使用 Docker 在 Linux 中更改目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48405872/

相关文章:

java - 如何获得现有的 JMS 队列?

linux - unrar : error while loading shared libraries: libstdc++. so.6:无法打开共享对象文件:没有这样的文件或目录

linux - 在嵌入式 Linux 系统上将 SDL 应用程序作为守护进程运行

ubuntu - docker 容器中的 "From ubuntu"

java - 从 ResultSet 元数据获取 "group by"信息

java - onNewIntent 没有被调用

java - 如何获得小数点后 4 位的输出答案

java - java检查父目录是否存在

docker - 使用 java 版本 1.8.0_282 在容器上设置 MaxRAMPercentage

windows - 如何使用 docker 容器在浏览器中打开 rabbitmq?