Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docker-java InspectContainerResponse function error,the jackson can't parse the windows volume path #2243

Open
huangmq-code opened this issue Nov 7, 2023 · 2 comments

Comments

@huangmq-code
Copy link

Exception in thread "main" javax.ws.rs.client.ResponseProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Error parsing Bind 'E:\data\tmp:/tmp:rw' (through reference chain: com.github.dockerjava.api.command.InspectContainerResponse["HostConfig"]->com.github.dockerjava.api.model.HostConfig["Binds"])
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:713)
at org.glassfish.jersey.client.JerseyInvocation.lambda$invoke$1(JerseyInvocation.java:643)
at org.glassfish.jersey.client.JerseyInvocation.call(JerseyInvocation.java:665)
at org.glassfish.jersey.client.JerseyInvocation.lambda$runInScope$3(JerseyInvocation.java:659)
at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
at org.glassfish.jersey.internal.Errors.process(Errors.java:205)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:390)
at org.glassfish.jersey.client.JerseyInvocation.runInScope(JerseyInvocation.java:659)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:642)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:417)
at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:313)
at com.github.dockerjava.jaxrs.InspectContainerCmdExec.execute(InspectContainerCmdExec.java:30)
at com.github.dockerjava.jaxrs.InspectContainerCmdExec.execute(InspectContainerCmdExec.java:13)
at com.github.dockerjava.jaxrs.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:23)
at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:35)
at com.github.dockerjava.core.command.InspectContainerCmdImpl.exec(InspectContainerCmdImpl.java:52)
at sc.example.test.createContainerTest.getContainStatus(createContainerTest.java:48)
at sc.example.test.createContainerTest.startContainerByName(createContainerTest.java:62)
at sc.example.test.createContainerTest.main(createContainerTest.java:167)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Error parsing Bind 'E:\data\tmp:/tmp:rw' (through reference chain: com.github.dockerjava.api.command.InspectContainerResponse["HostConfig"]->com.github.dockerjava.api.model.HostConfig["Binds"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:390)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:349)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1822)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:326)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:2007)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1174)
at com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:816)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:233)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:212)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:132)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1072)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:885)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:819)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:298)
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:710)
... 19 more
Caused by: java.lang.IllegalArgumentException: Error parsing Bind 'E:\data\tmp:/tmp:rw'
at com.github.dockerjava.api.model.Bind.parse(Bind.java:134)
at com.github.dockerjava.api.model.Binds$Deserializer.deserialize(Binds.java:64)
at com.github.dockerjava.api.model.Binds$Deserializer.deserialize(Binds.java:53)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)
... 35 more
Caused by: java.lang.IllegalArgumentException
at com.github.dockerjava.api.model.Bind.parse(Bind.java:130)
... 39 more

@lundefugl
Copy link

Same problem in version 3.3.4:

Caused by: java.lang.IllegalArgumentException: Error parsing Bind 'C:/FOO/Bar/../runtime/mycontainers/core/:/logs:rw'
at com.github.dockerjava.api.model.Bind.parse(Bind.java:137) ~[docker-java-api-3.3.4.jar:?]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) ~[?:?]

The problem is that the :\ is ignored but not :/

@lundefugl
Copy link

A solution would be to adjust the regex.

In my environment, the following adaptation would work. Colons are ignored if they are second in the string and preceded by a single letter only.

In "docker-java-api/src/main/java/com/github/dockerjava/api/model/Bind.java" I modified the line like this:

String[] parts = serialized.split("(?<!(^[A-Za-z])):(?!\\\\)");

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants