【问题标题】:How to change directories in Linux with Docker如何使用 Docker 在 Linux 中更改目录
【发布时间】:2018-01-23 15:56:14
【问题描述】:

我的代码正在运行,但我无法使用该命令更改目录。我可以 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();

【问题讨论】:

  • 更奇怪的是,如果我 cd 到一个不存在的目录,它会向我显示不存在的错误。
  • 澄清一下,您正在尝试在 Docker 容器内运行的 Java 应用程序中 cd,但这不起作用?您遇到了什么错误?
  • 没有错误。如果我 ls /dirName,它会起作用。但我真正想要的是更改文件夹
  • 您可以尝试链接命令,例如message = "cd someDir && ls" 吗?
  • 好的,我会检查的

标签: java linux docker


【解决方案1】:

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

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

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

【讨论】:

  • 我的意思是运行一个文件。当我运行它时,它会进入背景而不是显示。 cd /文件夹;./dn
  • 但它为什么会死呢?我不能保持连接打开并继续发送命令吗?
  • 问题可能在于收集 std 和 err 输出。确保程序已运行:运行 java 并显示以下消息:message = 'cd /folder;./dn > output 2> error' 在 java 之外的终端上:docker exec CONTAINER /bin/sh -c 'cat /folder/output;猫/文件夹/错误'
  • 当我调用 dockerClient.execStartCmd(container.getId()).withExecId(execCreateCmdResponse.getId()).withTty(true).exec(new ExecStartResultCallback(out, err)).awaitCompletion(); 时,它会将进程发送到后台并挂在这里,但我可以看到无法交互的控制台。
  • 该过程结束,因为这不是一个交互式过程。当一个非交互式进程结束时,它自然而然地死亡。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2014-01-05
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
相关资源
最近更新 更多