-
Notifications
You must be signed in to change notification settings - Fork 449
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
Add docker_wrapper and associated client/server changes #5855
Conversation
Signed-off-by: Vitalii Koshura <[email protected]>
Instead, use a WSL container containing the docker engine, and send it commands using the WSL mechanism
An image (especially in the universal model) may contain WU-specific files, or maybe completely a function of the WU. It's OK if we create lots of images. In general they'll share most of their layers so there's no disk penalty.
Remove container and image at end of job User docker log to should output from container In standalone mode, slot dir is . and project is project/ Add some verbose output; send all debugging output to stderr
We don't use Docker Desktop. Instead we use a WSL Ubuntu 24.04 image in which podman is installed.
Either or both could be present on both Linux and Win/WSL. If both, use podman. Do this separately for engine and compose; a host could have the podman engine but Docker compose. data structures: old: (in both HOSTINFO and WSL_DISTRO): bool is_docker_available: it's present, AND allowed by config string docker_version ... and same for docker_compose new: string docker_version: empty if not present DOCKER_TYPE docker_version_type (DOCKER or PODMAN) We send this in sched requests even if Docker disallowed by prefs (send that flag separately). This way projects can know what software a host has, even if they can't use it. (Should use this approach with VBox too)
… requests. (still query the presence of docker, and report it in sched requests). scheduler: parse the above docker_wrapper: use either docker or podman, depending on what's there (on the host (Unix) or in a WSL distro (Win))
use pause/unpause instead of start/stop Note: this works with podman only if root; need to figure out how to do that
needed for podman's pause and unpause to work Add a lib function run_command_pipe() for this purpose.
@davidpanderson, please fix build error: https://github.com/BOINC/boinc/actions/runs/11507373201/job/32033412490?pr=5855
|
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #5855 +/- ##
============================================
+ Coverage 10.51% 10.76% +0.25%
Complexity 1068 1068
============================================
Files 280 280
Lines 36021 36493 +472
Branches 8441 8444 +3
============================================
+ Hits 3789 3930 +141
- Misses 31843 32174 +331
Partials 389 389
|
Done |
Support app versions that run jobs in Docker containers.
This also works with podman, an open-source and daemonless Docker equivalent.
Also: some changes to the client in terms of how Docker and podman are detected,
and the corresponding data structures.
Also: minor changes to the scheduler for parsing this info
(to be used by plan class specs).
Fixes #5825