-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Description
When using Bind.parse()
on Windows, if the bind string contains an absolute path with a drive letter (e.g. G:/path/to/folder:/container/path:rw
), it fails with IllegalArgumentException
due to incorrect parsing of the colon :
in the drive letter.
Example
String serialized = "G:/zzcoder-judger-work/304bdf33-8970-4e06-a3d1-e10b7f162960:/app:rw";
Bind bind = Bind.parse(serialized);
Result
java.lang.IllegalArgumentException: Error parsing Bind 'G:/zzcoder-judger-work/304bdf33-8970-4e06-a3d1-e10b7f162960:/app:rw'
at com.github.dockerjava.api.model.Bind.parse(Bind.java:...)
...
This is because Bind.parse()
internally uses split(":(?!\\\\)")
, which incorrectly splits the drive letter (G:
) as a separate part, resulting in a malformed array of parts like:
parts[0] = "G"
parts[1] = "/zzcoder-judger-work/..."
parts[2] = "/app"
parts[3] = "rw"
Thus, the method throws IllegalArgumentException
.
Expected Behavior
Bind.parse()
should handle valid Windows-style absolute paths that contain a colon (:
) as part of the drive letter (e.g. C:/...
, D:/...
, etc.) and not split them incorrectly.
Environment
- OS: Windows 11
- docker-java version: 3.4.0
- Java version: 17
Suggested Fix
Consider improving the parser logic in Bind.parse()
to:
- Recognize Windows drive letters and handle them gracefully.
- Avoid blindly splitting on
:
without checking the context. - Possibly introduce an overloaded method or helper for cross-platform compatibility.
Thanks for your support and for maintaining this useful library!