Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过远程Docker Java API启动Docker容器_Java_Docker - Fatal编程技术网

无法通过远程Docker Java API启动Docker容器

无法通过远程Docker Java API启动Docker容器,java,docker,Java,Docker,我是Docker技术的初学者,我一直在尝试构建一个Java应用程序,它能够启动和停止现有的Docker容器 为此,我一直在使用Java Docker API客户端-Docker Java。 我一直在使用测试用例来观察这个API是如何工作的,因为我还没有找到任何相关的教程 通过使用这些代码,我已经使用下面的代码示例使Java应用程序能够创建Docker容器 CreateContainerResponse container = client.createContainerCmd("chiranga

我是Docker技术的初学者,我一直在尝试构建一个Java应用程序,它能够启动和停止现有的Docker容器

为此,我一直在使用Java Docker API客户端-Docker Java。 我一直在使用测试用例来观察这个API是如何工作的,因为我还没有找到任何相关的教程

通过使用这些代码,我已经使用下面的代码示例使Java应用程序能够创建Docker容器

CreateContainerResponse container = client.createContainerCmd("chirangaalwis/docker-whale")
                .withCmd("/bin/sh -c '/usr/gam")
                .exec();
但是我没有成功启动我使用Java应用程序创建的容器,它抛出了以下异常:

Exception in thread "main" com.github.dockerjava.api.InternalServerErrorException: Cannot start container 485386a92b34c5aaf53793207e5c6a8146295b23602c9d0adf86d64a1b27d031: write /sys/fs/cgroup/cpuset/docker/485386a92b34c5aaf53793207e5c6a8146295b23602c9d0adf86d64a1b27d031/cpuset.cpus: invalid argument

    at com.github.dockerjava.core.util.ResponseStatusExceptionFilter.filter(ResponseStatusExceptionFilter.java:53)
    at org.glassfish.jersey.client.ClientFilteringStages$ResponseFilterStage.apply(ClientFilteringStages.java:139)
    at org.glassfish.jersey.client.ClientFilteringStages$ResponseFilterStage.apply(ClientFilteringStages.java:127)
    at org.glassfish.jersey.process.internal.Stages.process(Stages.java:171)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:259)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:671)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:668)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:668)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:428)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:334)
    at com.github.dockerjava.jaxrs.StartContainerCmdExec.execute(StartContainerCmdExec.java:28)
    at com.github.dockerjava.jaxrs.StartContainerCmdExec.execute(StartContainerCmdExec.java:13)
    at com.github.dockerjava.jaxrs.AbstrDockerCmdExec.exec(AbstrDockerCmdExec.java:53)
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:29)
    at com.github.dockerjava.core.command.StartContainerCmdImpl.exec(StartContainerCmdImpl.java:53)
    at lk.ac.iit.java_docker.DockerWithJavaClass.main(DockerWithJavaClass.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
client.startContainerCmd("/sys/fs/cgroup/cpuset/docker/" + container.getId() + "/cpuset.cpus").exec();
这是我用于上述目的的代码示例:

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Info;
import com.github.dockerjava.api.model.SearchItem;
import com.github.dockerjava.core.DockerClientBuilder;
import com.kpelykh.docker.client.model.ContainerCreateResponse;

import java.util.List;

/**
 * Created by chiranga on 7/29/15.
 */
public class DockerWithJavaClass {
    public static void main(String[] args) {
        DockerClient client = DockerClientBuilder.getInstance("http://localhost:2375").build();

        System.out.println("This is my client " + client);
        System.out.println();

        Info info = client.infoCmd().exec();
        System.out.println(info);
        System.out.println();

        CreateContainerResponse container = client.createContainerCmd("chirangaalwis/docker-whale")
                .withCmd("/bin/sh -c '/usr/gam")
                .exec();

        client.startContainerCmd(container.getId()).exec();
    }
}
基于异常消息,我更改了代码,以便将id与给定的完整路径一起打印,从而导致另一个新异常,如下所示:

Exception in thread "main" com.github.dockerjava.api.DockerException
    at com.github.dockerjava.core.util.ResponseStatusExceptionFilter.filter(ResponseStatusExceptionFilter.java:55)
    at org.glassfish.jersey.client.ClientFilteringStages$ResponseFilterStage.apply(ClientFilteringStages.java:139)
    at org.glassfish.jersey.client.ClientFilteringStages$ResponseFilterStage.apply(ClientFilteringStages.java:127)
    at org.glassfish.jersey.process.internal.Stages.process(Stages.java:171)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:259)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:671)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:668)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:668)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:428)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:334)
    at com.github.dockerjava.jaxrs.StartContainerCmdExec.execute(StartContainerCmdExec.java:28)
    at com.github.dockerjava.jaxrs.StartContainerCmdExec.execute(StartContainerCmdExec.java:13)
    at com.github.dockerjava.jaxrs.AbstrDockerCmdExec.exec(AbstrDockerCmdExec.java:53)
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:29)
    at com.github.dockerjava.core.command.StartContainerCmdImpl.exec(StartContainerCmdImpl.java:53)
    at lk.ac.iit.java_docker.DockerWithJavaClass.main(DockerWithJavaClass.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
在我获得上述新异常之前,对代码进行了以下更改:

Exception in thread "main" com.github.dockerjava.api.InternalServerErrorException: Cannot start container 485386a92b34c5aaf53793207e5c6a8146295b23602c9d0adf86d64a1b27d031: write /sys/fs/cgroup/cpuset/docker/485386a92b34c5aaf53793207e5c6a8146295b23602c9d0adf86d64a1b27d031/cpuset.cpus: invalid argument

    at com.github.dockerjava.core.util.ResponseStatusExceptionFilter.filter(ResponseStatusExceptionFilter.java:53)
    at org.glassfish.jersey.client.ClientFilteringStages$ResponseFilterStage.apply(ClientFilteringStages.java:139)
    at org.glassfish.jersey.client.ClientFilteringStages$ResponseFilterStage.apply(ClientFilteringStages.java:127)
    at org.glassfish.jersey.process.internal.Stages.process(Stages.java:171)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:259)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:671)
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:668)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:668)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:428)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:334)
    at com.github.dockerjava.jaxrs.StartContainerCmdExec.execute(StartContainerCmdExec.java:28)
    at com.github.dockerjava.jaxrs.StartContainerCmdExec.execute(StartContainerCmdExec.java:13)
    at com.github.dockerjava.jaxrs.AbstrDockerCmdExec.exec(AbstrDockerCmdExec.java:53)
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:29)
    at com.github.dockerjava.core.command.StartContainerCmdImpl.exec(StartContainerCmdImpl.java:53)
    at lk.ac.iit.java_docker.DockerWithJavaClass.main(DockerWithJavaClass.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
client.startContainerCmd("/sys/fs/cgroup/cpuset/docker/" + container.getId() + "/cpuset.cpus").exec();

我对这项技术完全陌生,如果有人能为我提供一个解释清楚的解决方案,我将不胜感激。如果有更好的替代方案来完成这项任务,请具体说明。

只是为了让所有读者都知道,我找到了一个更好的远程API库,可以用来完成我试图完成的任务。链接到它只是为了让所有读者都知道,我找到了一个更好的远程API库,可以用来实现我试图完成的任务。它的链接是