繁体   English   中英

无法从 Java 挂载 Docker 卷

[英]Can't mount Docker volume from Java

我的工作环境是 macOS 12。
更新:Ubuntu 20.04 也有同样的问题。

我正在尝试创建一个 Docker 容器并为其挂载一个卷。

这是我尝试过的:

public class Test {

    public static void main(String[] args) throws IOException, InterruptedException {
        var p = Runtime.getRuntime().exec("docker run -d -it -v \"/Users/myname/Documents/MC_Servers/BungeeCord/plugins/PlayerServers/servers/OpenSourcee:/data\" -p 32348:32348 -e TYPE=PAPER -e ONLINE_MODE=false -e SERVER_PORT=32348 -e EULA=TRUE -e VERSION=1.8.8 --name OpenSourcee itzg/minecraft-server", null, null);

        // Read the output from the command
        var reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

        System.out.println(p.waitFor());
    }
}

输出好像是空的,退出值为125

有趣的是,如果我也这样做,但没有

-v \"/Users/myname/Documents/MC_Servers/BungeeCord/plugins/PlayerServers/servers/OpenSourcee:/data\"

它可以正常工作。 例如,以下工作:

public class Test {

    public static void main(String[] args) throws IOException, InterruptedException {
        var p = Runtime.getRuntime().exec("docker run -d -it -p 32348:32348 -e TYPE=PAPER -e ONLINE_MODE=false -e SERVER_PORT=32348 -e EULA=TRUE -e VERSION=1.8.8 --name OpenSourcee itzg/minecraft-server", null, null);

        // Read the output from the command
        var reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

        System.out.println(p.waitFor());
    }
}

我也尝试从第一个块手动执行命令,它可以正常工作,但是,它不适用于 Java。 我猜这可能是某种许可问题或什么...?

问题似乎是我使用了“,但它不是必需的,而且它还引起了问题。虽然在终端引号中使用 docker 命令似乎是必需的,但在 Java 中,它似乎是相反的。

对于有类似问题的任何人,我建议还检查p.getErrorStream()并从那里继续调试错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM