From 98eab1fb4f8dc47094ac1cf64f3509f2e37cc2c3 Mon Sep 17 00:00:00 2001 From: yusing Date: Wed, 19 Nov 2025 15:11:54 +0800 Subject: [PATCH] Revert "refactor(docker): migrate from github.com/docker/docker to github.com/moby/moby" This reverts commit c1561737576250dce0f6c85c1f881e3302b44160. --- agent/go.mod | 8 ++- agent/go.sum | 37 ++++++++++-- go.mod | 19 ++++-- go.sum | 29 +++++++-- internal/api/v1/docker/container.go | 17 +++--- internal/api/v1/docker/containers.go | 7 +-- internal/api/v1/docker/info.go | 9 ++- internal/api/v1/docker/logs.go | 6 +- internal/api/v1/docker/restart.go | 12 +--- internal/api/v1/docker/start.go | 6 +- internal/api/v1/docker/stop.go | 6 +- internal/docker/client.go | 14 ++--- internal/docker/container.go | 27 ++++----- internal/docker/container_helper.go | 2 +- internal/docker/container_test.go | 2 +- internal/docker/list_containers.go | 8 +-- internal/idlewatcher/provider/docker.go | 30 ++++------ internal/route/provider/docker_labels_test.go | 4 +- internal/route/provider/docker_test.go | 17 +++--- internal/route/provider/provider.go | 2 +- internal/route/route.go | 3 +- internal/route/route_test.go | 3 +- internal/types/docker.go | 4 +- internal/watcher/docker_watcher.go | 60 +++++++------------ internal/watcher/events/events.go | 2 +- internal/watcher/health/monitor/docker.go | 7 +-- 26 files changed, 178 insertions(+), 163 deletions(-) diff --git a/agent/go.mod b/agent/go.mod index b4aa99df..3657f436 100644 --- a/agent/go.mod +++ b/agent/go.mod @@ -26,6 +26,7 @@ require ( ) require ( + github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/PuerkitoBio/goquery v1.11.0 // indirect github.com/andybalholm/brotli v1.2.0 // indirect @@ -39,6 +40,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/cli v29.0.1+incompatible // indirect + github.com/docker/docker v28.5.2+incompatible // indirect github.com/docker/go-connections v0.6.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/ebitengine/purego v0.9.1 // indirect @@ -64,14 +66,14 @@ require ( github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/moby/api v1.52.0 // indirect - github.com/moby/moby/client v0.1.0 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pires/go-proxyproto v0.8.1 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/quic-go/qpack v0.5.1 // indirect @@ -93,6 +95,7 @@ require ( go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect go.uber.org/atomic v1.11.0 // indirect @@ -103,4 +106,5 @@ require ( golang.org/x/text v0.31.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.5.2 // indirect ) diff --git a/agent/go.sum b/agent/go.sum index 57b4247b..1dd52dd5 100644 --- a/agent/go.sum +++ b/agent/go.sum @@ -1,3 +1,5 @@ +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/PuerkitoBio/goquery v1.11.0 h1:jZ7pwMQXIITcUXNH83LLk+txlaEy6NVOfTuP43xxfqw= @@ -22,6 +24,8 @@ github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/coreos/go-oidc/v3 v3.16.0 h1:qRQUCFstKpXwmEjDQTIbyY/5jF00+asXzSkmkoa/mow= github.com/coreos/go-oidc/v3 v3.16.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSwyXJqZH+sI8= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -37,6 +41,8 @@ github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= github.com/docker/cli v29.0.1+incompatible h1:EnvMEAR9Ro5xQEKbMitlabj5vCDY0vwcDyY/Lsow7FQ= github.com/docker/cli v29.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= +github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -94,6 +100,8 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gotify/server/v2 v2.7.3 h1:nro/ZnxdlZFvxFcw9LREGA8zdk6CK744azwhuhX/A4g= github.com/gotify/server/v2 v2.7.3/go.mod h1:VAtE1RIc/2j886PYs9WPQbMjqbFsoyQ0G8IdFtnAxU0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/json-iterator/go v1.1.13-0.20220915233716-71ac16282d12 h1:9Nu54bhS/H/Kgo2/7xNSUuC5G28VR8ljfrLKU2G4IjU= @@ -127,15 +135,19 @@ github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA= github.com/miekg/dns v1.1.68/go.mod h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/moby/api v1.52.0 h1:00BtlJY4MXkkt84WhUZPRqt5TvPbgig2FZvTbe3igYg= -github.com/moby/moby/api v1.52.0/go.mod h1:8mb+ReTlisw4pS6BRzCMts5M49W5M7bKt1cJy/YbAqc= -github.com/moby/moby/client v0.1.0 h1:nt+hn6O9cyJQqq5UWnFGqsZRTS/JirUqzPjEl0Bdc/8= -github.com/moby/moby/client v0.1.0/go.mod h1:O+/tw5d4a1Ha/ZA/tPxIZJapJRUS6LNZ1wiVRxYHyUE= +github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= +github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= +github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= @@ -146,6 +158,7 @@ github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0 github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pires/go-proxyproto v0.8.1 h1:9KEixbdJfhrbtjpz/ZwCdWDD2Xem0NZ38qMYaASJgp0= github.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= @@ -213,6 +226,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4= go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= @@ -221,6 +238,8 @@ go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6 go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= @@ -269,6 +288,7 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -314,6 +334,13 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto v0.0.0-20251111163417-95abcf5c77ba h1:Ze6qXW0j37YCqZdCD2LkzVSxgEWez0cO4NUyd44DiDY= +google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba h1:B14OtaXuMaCQsl2deSvNkyPKIzq3BjfxQp8d00QyWx4= +google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:G5IanEx8/PgI9w6CFcYQf7jMtHQhZruvfM1i3qOqk5U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba h1:UKgtfRM7Yh93Sya0Fo8ZzhDP4qBckrrxEr2oF5UIVb8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251111163417-95abcf5c77ba/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A= +google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -324,5 +351,3 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= -pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= -pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= diff --git a/go.mod b/go.mod index f5e603b1..9faa3982 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ replace github.com/yusing/goutils => ./goutils require ( github.com/PuerkitoBio/goquery v1.11.0 // parsing HTML for extract fav icon github.com/coreos/go-oidc/v3 v3.16.0 // oidc authentication + github.com/docker/docker v28.5.2+incompatible // docker daemon github.com/fsnotify/fsnotify v1.9.0 // file watcher github.com/gin-gonic/gin v1.11.0 // api server github.com/go-acme/lego/v4 v4.28.1 // acme client @@ -39,11 +40,9 @@ require ( github.com/bytedance/sonic v1.14.2 // fast json parsing github.com/docker/cli v29.0.1+incompatible // needs docker/cli/cli/connhelper connection helper for docker client github.com/goccy/go-yaml v1.18.0 // yaml parsing for different config files - github.com/golang-jwt/jwt/v5 v5.3.0 // jwt authentication - github.com/luthermonson/go-proxmox v0.2.3 // proxmox API client - github.com/moby/moby/api v1.52.0 // docker API - github.com/moby/moby/client v0.1.0 // docker client - github.com/oschwald/maxminddb-golang v1.13.1 // maxminddb for geoip database + github.com/golang-jwt/jwt/v5 v5.3.0 + github.com/luthermonson/go-proxmox v0.2.3 + github.com/oschwald/maxminddb-golang v1.13.1 github.com/quic-go/quic-go v0.56.0 // http3 support github.com/shirou/gopsutil/v4 v4.25.10 // system information github.com/spf13/afero v1.15.0 // afero for file system operations @@ -111,11 +110,11 @@ require ( github.com/ovh/go-ovh v1.9.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/quic-go/qpack v0.5.1 // indirect github.com/samber/lo v1.52.0 // indirect github.com/samber/slog-common v0.19.0 // indirect - github.com/samber/slog-zerolog/v2 v2.9.0 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.35 // indirect github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af // indirect github.com/sony/gobreaker v1.0.0 // indirect @@ -148,6 +147,7 @@ require ( github.com/cloudwego/base64x v0.1.6 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect + github.com/containerd/log v0.1.0 // indirect github.com/fatih/color v1.18.0 // indirect github.com/gin-contrib/sse v1.1.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -155,14 +155,19 @@ require ( github.com/go-resty/resty/v2 v2.16.5 // indirect github.com/goccy/go-json v0.10.5 // indirect github.com/google/go-querystring v1.1.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect github.com/klauspost/compress v1.18.1 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/linode/linodego v1.61.0 // indirect github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 // indirect + github.com/moby/sys/atomicwriter v0.1.0 // indirect + github.com/moby/term v0.5.2 // indirect + github.com/morikuni/aec v1.0.0 // indirect github.com/nrdcg/oci-go-sdk/common/v1065 v1065.104.1 // indirect github.com/nrdcg/oci-go-sdk/dns/v1065 v1065.104.1 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/samber/slog-zerolog/v2 v2.9.0 // indirect github.com/stretchr/objx v0.5.3 // indirect github.com/tklauser/go-sysconf v0.3.16 // indirect github.com/tklauser/numcpus v0.11.0 // indirect @@ -172,6 +177,8 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/vultr/govultr/v3 v3.24.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 // indirect + go.opentelemetry.io/proto/otlp v1.9.0 // indirect golang.org/x/arch v0.23.0 // indirect google.golang.org/genproto v0.0.0-20251111163417-95abcf5c77ba // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba // indirect diff --git a/go.sum b/go.sum index 0d6ebc78..71492d33 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,8 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourceg github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.9.0/go.mod h1:wVEOJfGTj0oPAUGA1JuRAvz/lxXQsWW16axmHPP47Bk= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs= @@ -60,6 +62,8 @@ github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -73,6 +77,8 @@ github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= github.com/docker/cli v29.0.1+incompatible h1:EnvMEAR9Ro5xQEKbMitlabj5vCDY0vwcDyY/Lsow7FQ= github.com/docker/cli v29.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= +github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -151,6 +157,8 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gotify/server/v2 v2.7.3 h1:nro/ZnxdlZFvxFcw9LREGA8zdk6CK744azwhuhX/A4g= github.com/gotify/server/v2 v2.7.3/go.mod h1:VAtE1RIc/2j886PYs9WPQbMjqbFsoyQ0G8IdFtnAxU0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= github.com/h2non/gock v1.2.0 h1:K6ol8rfrRkUOefooBC8elXoaNGYkpp7y2qcxGG6BzUE= github.com/h2non/gock v1.2.0/go.mod h1:tNhoxHYW2W42cYkYb1WqzdbYIieALC99kpYr7rH/BQk= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= @@ -206,15 +214,19 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/moby/api v1.52.0 h1:00BtlJY4MXkkt84WhUZPRqt5TvPbgig2FZvTbe3igYg= -github.com/moby/moby/api v1.52.0/go.mod h1:8mb+ReTlisw4pS6BRzCMts5M49W5M7bKt1cJy/YbAqc= -github.com/moby/moby/client v0.1.0 h1:nt+hn6O9cyJQqq5UWnFGqsZRTS/JirUqzPjEl0Bdc/8= -github.com/moby/moby/client v0.1.0/go.mod h1:O+/tw5d4a1Ha/ZA/tPxIZJapJRUS6LNZ1wiVRxYHyUE= +github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= +github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= +github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/nrdcg/goacmedns v0.2.0 h1:ADMbThobzEMnr6kg2ohs4KGa3LFqmgiBA22/6jUWJR0= github.com/nrdcg/goacmedns v0.2.0/go.mod h1:T5o6+xvSLrQpugmwHvrSNkzWht0UGAwj2ACBMhh73Cg= github.com/nrdcg/oci-go-sdk/common/v1065 v1065.104.1 h1:kR8dHXC53heV4fttilXXkDkGmkdC5bvQ2XgbVBoD+ns= @@ -239,6 +251,7 @@ github.com/pires/go-proxyproto v0.8.1 h1:9KEixbdJfhrbtjpz/ZwCdWDD2Xem0NZ38qMYaAS github.com/pires/go-proxyproto v0.8.1/go.mod h1:ZKAAyp3cgy5Y5Mo4n9AlScrkCZwUy0g3Jf+slqQVcuU= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/xattr v0.4.9 h1:5883YPCtkSd8LFbs13nXplj9g9tlrwoJRjgpgMu1/fE= github.com/pkg/xattr v0.4.9/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= @@ -324,6 +337,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0 h1:aTL7F04bJHUlztTsNGJ2l+6he8c+y/b//eR0jjjemT4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.38.0/go.mod h1:kldtb7jDTeol0l3ewcmd8SDvx3EmIE7lyvqbasU3QC4= go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= @@ -332,6 +349,8 @@ go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6 go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= @@ -457,5 +476,3 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= -pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= -pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= diff --git a/internal/api/v1/docker/container.go b/internal/api/v1/docker/container.go index 18eeaeca..108a9815 100644 --- a/internal/api/v1/docker/container.go +++ b/internal/api/v1/docker/container.go @@ -4,7 +4,6 @@ import ( "net/http" "github.com/gin-gonic/gin" - "github.com/moby/moby/client" "github.com/yusing/godoxy/internal/docker" apitypes "github.com/yusing/goutils/apitypes" ) @@ -35,30 +34,30 @@ func GetContainer(c *gin.Context) { return } - dockerClient, err := docker.NewClient(dockerHost) + client, err := docker.NewClient(dockerHost) if err != nil { c.Error(apitypes.InternalServerError(err, "failed to create docker client")) return } - defer dockerClient.Close() + defer client.Close() - cont, err := dockerClient.ContainerInspect(c.Request.Context(), id, client.ContainerInspectOptions{}) + cont, err := client.ContainerInspect(c.Request.Context(), id) if err != nil { c.Error(apitypes.InternalServerError(err, "failed to inspect container")) return } var state ContainerState - if cont.Container.State != nil { - state = cont.Container.State.Status + if cont.State != nil { + state = cont.State.Status } c.JSON(http.StatusOK, &Container{ Server: dockerHost, - Name: cont.Container.Name, - ID: cont.Container.ID, - Image: cont.Container.Image, + Name: cont.Name, + ID: cont.ID, + Image: cont.Image, State: state, }) } diff --git a/internal/api/v1/docker/containers.go b/internal/api/v1/docker/containers.go index a07c24eb..4d6c1d05 100644 --- a/internal/api/v1/docker/containers.go +++ b/internal/api/v1/docker/containers.go @@ -4,9 +4,8 @@ import ( "context" "sort" + "github.com/docker/docker/api/types/container" "github.com/gin-gonic/gin" - "github.com/moby/moby/api/types/container" - "github.com/moby/moby/client" gperr "github.com/yusing/goutils/errs" _ "github.com/yusing/goutils/apitypes" @@ -40,12 +39,12 @@ func GetContainers(ctx context.Context, dockerClients DockerClients) ([]Containe errs := gperr.NewBuilder("failed to get containers") containers := make([]Container, 0) for server, dockerClient := range dockerClients { - conts, err := dockerClient.ContainerList(ctx, client.ContainerListOptions{All: true}) + conts, err := dockerClient.ContainerList(ctx, container.ListOptions{All: true}) if err != nil { errs.Add(err) continue } - for _, cont := range conts.Items { + for _, cont := range conts { containers = append(containers, Container{ Server: server, Name: cont.Names[0], diff --git a/internal/api/v1/docker/info.go b/internal/api/v1/docker/info.go index b96fc1d3..f5f79248 100644 --- a/internal/api/v1/docker/info.go +++ b/internal/api/v1/docker/info.go @@ -4,9 +4,8 @@ import ( "context" "sort" + dockerSystem "github.com/docker/docker/api/types/system" "github.com/gin-gonic/gin" - dockerSystem "github.com/moby/moby/api/types/system" - "github.com/moby/moby/client" gperr "github.com/yusing/goutils/errs" strutils "github.com/yusing/goutils/strings" @@ -65,13 +64,13 @@ func GetDockerInfo(ctx context.Context, dockerClients DockerClients) ([]dockerIn i := 0 for name, dockerClient := range dockerClients { - info, err := dockerClient.Info(ctx, client.InfoOptions{}) + info, err := dockerClient.Info(ctx) if err != nil { errs.Add(err) continue } - info.Info.Name = name - dockerInfos[i] = toDockerInfo(info.Info) + info.Name = name + dockerInfos[i] = toDockerInfo(info) i++ } diff --git a/internal/api/v1/docker/logs.go b/internal/api/v1/docker/logs.go index 867fdf47..917ee1f2 100644 --- a/internal/api/v1/docker/logs.go +++ b/internal/api/v1/docker/logs.go @@ -6,9 +6,9 @@ import ( "fmt" "net/http" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/pkg/stdcopy" "github.com/gin-gonic/gin" - "github.com/moby/moby/api/pkg/stdcopy" - "github.com/moby/moby/client" "github.com/rs/zerolog/log" "github.com/yusing/godoxy/internal/docker" apitypes "github.com/yusing/goutils/apitypes" @@ -70,7 +70,7 @@ func Logs(c *gin.Context) { } defer dockerClient.Close() - opts := client.ContainerLogsOptions{ + opts := container.LogsOptions{ ShowStdout: queryParams.Stdout, ShowStderr: queryParams.Stderr, Since: queryParams.Since, diff --git a/internal/api/v1/docker/restart.go b/internal/api/v1/docker/restart.go index b43207bb..5a72eb30 100644 --- a/internal/api/v1/docker/restart.go +++ b/internal/api/v1/docker/restart.go @@ -4,23 +4,17 @@ import ( "net/http" "github.com/gin-gonic/gin" - "github.com/moby/moby/client" "github.com/yusing/godoxy/internal/docker" apitypes "github.com/yusing/goutils/apitypes" ) -type RestartRequest struct { - ID string `json:"id" binding:"required"` - client.ContainerRestartOptions -} - // @x-id "restart" // @BasePath /api/v1 // @Summary Restart container // @Description Restart container by container id // @Tags docker // @Produce json -// @Param request body RestartRequest true "Request" +// @Param request body StopRequest true "Request" // @Success 200 {object} apitypes.SuccessResponse // @Failure 400 {object} apitypes.ErrorResponse "Invalid request" // @Failure 403 {object} apitypes.ErrorResponse @@ -28,7 +22,7 @@ type RestartRequest struct { // @Failure 500 {object} apitypes.ErrorResponse // @Router /docker/restart [post] func Restart(c *gin.Context) { - var req RestartRequest + var req StopRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(http.StatusBadRequest, apitypes.Error("invalid request", err)) return @@ -48,7 +42,7 @@ func Restart(c *gin.Context) { defer client.Close() - _, err = client.ContainerRestart(c.Request.Context(), req.ID, req.ContainerRestartOptions) + err = client.ContainerRestart(c.Request.Context(), req.ID, req.StopOptions) if err != nil { c.Error(apitypes.InternalServerError(err, "failed to restart container")) return diff --git a/internal/api/v1/docker/start.go b/internal/api/v1/docker/start.go index cd6a0ccb..ad3eb176 100644 --- a/internal/api/v1/docker/start.go +++ b/internal/api/v1/docker/start.go @@ -3,15 +3,15 @@ package dockerapi import ( "net/http" + "github.com/docker/docker/api/types/container" "github.com/gin-gonic/gin" - "github.com/moby/moby/client" "github.com/yusing/godoxy/internal/docker" apitypes "github.com/yusing/goutils/apitypes" ) type StartRequest struct { ID string `json:"id" binding:"required"` - client.ContainerStartOptions + container.StartOptions } // @x-id "start" @@ -48,7 +48,7 @@ func Start(c *gin.Context) { defer client.Close() - _, err = client.ContainerStart(c.Request.Context(), req.ID, req.ContainerStartOptions) + err = client.ContainerStart(c.Request.Context(), req.ID, req.StartOptions) if err != nil { c.Error(apitypes.InternalServerError(err, "failed to start container")) return diff --git a/internal/api/v1/docker/stop.go b/internal/api/v1/docker/stop.go index 32a235e2..5db90737 100644 --- a/internal/api/v1/docker/stop.go +++ b/internal/api/v1/docker/stop.go @@ -3,15 +3,15 @@ package dockerapi import ( "net/http" + "github.com/docker/docker/api/types/container" "github.com/gin-gonic/gin" - "github.com/moby/moby/client" "github.com/yusing/godoxy/internal/docker" apitypes "github.com/yusing/goutils/apitypes" ) type StopRequest struct { ID string `json:"id" binding:"required"` - client.ContainerStopOptions + container.StopOptions } // @x-id "stop" @@ -48,7 +48,7 @@ func Stop(c *gin.Context) { defer client.Close() - _, err = client.ContainerStop(c.Request.Context(), req.ID, req.ContainerStopOptions) + err = client.ContainerStop(c.Request.Context(), req.ID, req.StopOptions) if err != nil { c.Error(apitypes.InternalServerError(err, "failed to stop container")) return diff --git a/internal/docker/client.go b/internal/docker/client.go index 6bf84ec4..427b281c 100644 --- a/internal/docker/client.go +++ b/internal/docker/client.go @@ -14,7 +14,7 @@ import ( "unsafe" "github.com/docker/cli/cli/connhelper" - "github.com/moby/moby/client" + "github.com/docker/docker/client" "github.com/rs/zerolog/log" "github.com/yusing/godoxy/agent/pkg/agent" "github.com/yusing/godoxy/internal/common" @@ -110,8 +110,6 @@ func Clients() map[string]*SharedClient { return clients } -var versionArg = client.WithVersion("v1.51.0") - // NewClient creates a new Docker client connection to the specified host. // // Returns existing client if available. @@ -154,7 +152,7 @@ func NewClient(host string, unique ...bool) (*SharedClient, error) { opt = []client.Opt{ client.WithHost(agent.DockerHost), client.WithHTTPClient(cfg.NewHTTPClient()), - versionArg, + client.WithAPIVersionNegotiation(), } addr = "tcp://" + cfg.Addr dial = cfg.DialContext @@ -165,7 +163,7 @@ func NewClient(host string, unique ...bool) (*SharedClient, error) { case common.DockerHostFromEnv: opt = []client.Opt{ client.WithHostFromEnv(), - versionArg, + client.WithAPIVersionNegotiation(), } default: helper, err := connhelper.GetConnectionHelper(host) @@ -181,19 +179,19 @@ func NewClient(host string, unique ...bool) (*SharedClient, error) { opt = []client.Opt{ client.WithHTTPClient(httpClient), client.WithHost(helper.Host), - versionArg, + client.WithAPIVersionNegotiation(), client.WithDialContext(helper.Dialer), } } else { opt = []client.Opt{ client.WithHost(host), - versionArg, + client.WithAPIVersionNegotiation(), } } } } - client, err := client.New(opt...) + client, err := client.NewClientWithOpts(opt...) if err != nil { return nil, err } diff --git a/internal/docker/container.go b/internal/docker/container.go index 50490505..d0c187ef 100644 --- a/internal/docker/container.go +++ b/internal/docker/container.go @@ -11,9 +11,8 @@ import ( "strconv" "strings" + "github.com/docker/docker/api/types/container" "github.com/docker/go-connections/nat" - "github.com/moby/moby/api/types/container" - "github.com/moby/moby/client" "github.com/yusing/godoxy/agent/pkg/agent" "github.com/yusing/godoxy/internal/serialization" "github.com/yusing/godoxy/internal/types" @@ -93,24 +92,24 @@ func IsBlacklisted(c *types.Container) bool { } func UpdatePorts(c *types.Container) error { - dockerClient, err := NewClient(c.DockerHost) + client, err := NewClient(c.DockerHost) if err != nil { return err } - defer dockerClient.Close() + defer client.Close() - inspect, err := dockerClient.ContainerInspect(context.Background(), c.ContainerID, client.ContainerInspectOptions{}) + inspect, err := client.ContainerInspect(context.Background(), c.ContainerID) if err != nil { return err } - for port := range inspect.Container.Config.ExposedPorts { - proto, portStr := nat.SplitProtoPort(port.String()) + for port := range inspect.Config.ExposedPorts { + proto, portStr := nat.SplitProtoPort(string(port)) portInt, _ := nat.ParsePort(portStr) if portInt == 0 { continue } - c.PublicPortMapping[portInt] = container.PortSummary{ + c.PublicPortMapping[portInt] = container.Port{ PublicPort: uint16(portInt), //nolint:gosec PrivatePort: uint16(portInt), //nolint:gosec Type: proto, @@ -208,8 +207,8 @@ func setPrivateHostname(c *types.Container, helper containerHelper) { } if c.Network != "" { v, ok := helper.NetworkSettings.Networks[c.Network] - if ok && v.IPAddress.IsValid() { - c.PrivateHostname = v.IPAddress.String() + if ok { + c.PrivateHostname = v.IPAddress return } // try {project_name}_{network_name} @@ -217,9 +216,9 @@ func setPrivateHostname(c *types.Container, helper containerHelper) { oldNetwork, newNetwork := c.Network, fmt.Sprintf("%s_%s", proj, c.Network) if newNetwork != oldNetwork { v, ok = helper.NetworkSettings.Networks[newNetwork] - if ok && v.IPAddress.IsValid() { + if ok { c.Network = newNetwork // update network to the new one - c.PrivateHostname = v.IPAddress.String() + c.PrivateHostname = v.IPAddress return } } @@ -230,9 +229,9 @@ func setPrivateHostname(c *types.Container, helper containerHelper) { } // fallback to first network if no network is specified for k, v := range helper.NetworkSettings.Networks { - if v.IPAddress.IsValid() { + if v.IPAddress != "" { c.Network = k // update network to the first network - c.PrivateHostname = v.IPAddress.String() + c.PrivateHostname = v.IPAddress return } } diff --git a/internal/docker/container_helper.go b/internal/docker/container_helper.go index cea49859..7dab7609 100644 --- a/internal/docker/container_helper.go +++ b/internal/docker/container_helper.go @@ -3,7 +3,7 @@ package docker import ( "strings" - "github.com/moby/moby/api/types/container" + "github.com/docker/docker/api/types/container" "github.com/yusing/ds/ordered" "github.com/yusing/godoxy/internal/types" strutils "github.com/yusing/goutils/strings" diff --git a/internal/docker/container_test.go b/internal/docker/container_test.go index 8423451b..3dddd829 100644 --- a/internal/docker/container_test.go +++ b/internal/docker/container_test.go @@ -3,7 +3,7 @@ package docker import ( "testing" - "github.com/moby/moby/api/types/container" + "github.com/docker/docker/api/types/container" expect "github.com/yusing/goutils/testing" ) diff --git a/internal/docker/list_containers.go b/internal/docker/list_containers.go index 0e9d197e..e1a98e52 100644 --- a/internal/docker/list_containers.go +++ b/internal/docker/list_containers.go @@ -3,11 +3,11 @@ package docker import ( "context" - "github.com/moby/moby/api/types/container" - "github.com/moby/moby/client" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/client" ) -var listOptions = client.ContainerListOptions{ +var listOptions = container.ListOptions{ // created|restarting|running|removing|paused|exited|dead // Filters: filters.NewArgs( // filters.Arg("status", "created"), @@ -30,7 +30,7 @@ func ListContainers(ctx context.Context, clientHost string) ([]container.Summary if err != nil { return nil, err } - return containers.Items, nil + return containers, nil } func IsErrConnectionFailed(err error) bool { diff --git a/internal/idlewatcher/provider/docker.go b/internal/idlewatcher/provider/docker.go index f8929322..9f9bb2ce 100644 --- a/internal/idlewatcher/provider/docker.go +++ b/internal/idlewatcher/provider/docker.go @@ -3,8 +3,7 @@ package provider import ( "context" - "github.com/moby/moby/api/types/container" - "github.com/moby/moby/client" + "github.com/docker/docker/api/types/container" "github.com/yusing/godoxy/internal/docker" idlewatcher "github.com/yusing/godoxy/internal/idlewatcher/types" "github.com/yusing/godoxy/internal/types" @@ -18,7 +17,7 @@ type DockerProvider struct { containerID string } -var startOptions = client.ContainerStartOptions{} +var startOptions = container.StartOptions{} func NewDockerProvider(dockerHost, containerID string) (idlewatcher.Provider, error) { client, err := docker.NewClient(dockerHost) @@ -33,41 +32,34 @@ func NewDockerProvider(dockerHost, containerID string) (idlewatcher.Provider, er } func (p *DockerProvider) ContainerPause(ctx context.Context) error { - _, err := p.client.ContainerPause(ctx, p.containerID, client.ContainerPauseOptions{}) - return err + return p.client.ContainerPause(ctx, p.containerID) } func (p *DockerProvider) ContainerUnpause(ctx context.Context) error { - _, err := p.client.ContainerUnpause(ctx, p.containerID, client.ContainerUnpauseOptions{}) - return err + return p.client.ContainerUnpause(ctx, p.containerID) } func (p *DockerProvider) ContainerStart(ctx context.Context) error { - _, err := p.client.ContainerStart(ctx, p.containerID, startOptions) - return err + return p.client.ContainerStart(ctx, p.containerID, startOptions) } func (p *DockerProvider) ContainerStop(ctx context.Context, signal types.ContainerSignal, timeout int) error { - _, err := p.client.ContainerStop(ctx, p.containerID, client.ContainerStopOptions{ + return p.client.ContainerStop(ctx, p.containerID, container.StopOptions{ Signal: string(signal), Timeout: &timeout, }) - return err } func (p *DockerProvider) ContainerKill(ctx context.Context, signal types.ContainerSignal) error { - _, err := p.client.ContainerKill(ctx, p.containerID, client.ContainerKillOptions{ - Signal: string(signal), - }) - return err + return p.client.ContainerKill(ctx, p.containerID, string(signal)) } func (p *DockerProvider) ContainerStatus(ctx context.Context) (idlewatcher.ContainerStatus, error) { - status, err := p.client.ContainerInspect(ctx, p.containerID, client.ContainerInspectOptions{}) + status, err := p.client.ContainerInspect(ctx, p.containerID) if err != nil { return idlewatcher.ContainerStatusError, err } - switch status.Container.State.Status { + switch status.State.Status { case container.StateRunning: return idlewatcher.ContainerStatusRunning, nil case container.StateExited, container.StateDead, container.StateRestarting: @@ -75,12 +67,12 @@ func (p *DockerProvider) ContainerStatus(ctx context.Context) (idlewatcher.Conta case container.StatePaused: return idlewatcher.ContainerStatusPaused, nil } - return idlewatcher.ContainerStatusError, idlewatcher.ErrUnexpectedContainerStatus.Subject(string(status.Container.State.Status)) + return idlewatcher.ContainerStatusError, idlewatcher.ErrUnexpectedContainerStatus.Subject(status.State.Status) } func (p *DockerProvider) Watch(ctx context.Context) (eventCh <-chan watcher.Event, errCh <-chan gperr.Error) { return p.watcher.EventsWithOptions(ctx, watcher.DockerListOptions{ - Filters: watcher.NewDockerFilters( + Filters: watcher.NewDockerFilter( watcher.DockerFilterContainer, watcher.DockerFilterContainerNameID(p.containerID), watcher.DockerFilterStart, diff --git a/internal/route/provider/docker_labels_test.go b/internal/route/provider/docker_labels_test.go index 54ffca3b..bb7e4b54 100644 --- a/internal/route/provider/docker_labels_test.go +++ b/internal/route/provider/docker_labels_test.go @@ -3,8 +3,8 @@ package provider import ( "testing" + "github.com/docker/docker/api/types/container" "github.com/goccy/go-yaml" - "github.com/moby/moby/api/types/container" "github.com/yusing/godoxy/internal/docker" expect "github.com/yusing/goutils/testing" @@ -25,7 +25,7 @@ func TestParseDockerLabels(t *testing.T) { Names: []string{"container"}, Labels: labels, State: "running", - Ports: []container.PortSummary{ + Ports: []container.Port{ {Type: "tcp", PrivatePort: 1234, PublicPort: 1234}, }, }, "/var/run/docker.sock"), diff --git a/internal/route/provider/docker_test.go b/internal/route/provider/docker_test.go index e8e6a3ea..65c6df0d 100644 --- a/internal/route/provider/docker_test.go +++ b/internal/route/provider/docker_test.go @@ -1,13 +1,12 @@ package provider import ( - "net/netip" "testing" "time" - "github.com/moby/moby/api/types/container" - "github.com/moby/moby/api/types/network" - "github.com/moby/moby/client" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/client" D "github.com/yusing/godoxy/internal/docker" "github.com/yusing/godoxy/internal/route" routeTypes "github.com/yusing/godoxy/internal/route/types" @@ -275,7 +274,7 @@ func TestPrivateIPLocalhost(t *testing.T) { NetworkSettings: &container.NetworkSettingsSummary{ Networks: map[string]*network.EndpointSettings{ "network": { - IPAddress: netip.MustParseAddr(testDockerIP), + IPAddress: testDockerIP, }, }, }, @@ -293,7 +292,7 @@ func TestPrivateIPRemote(t *testing.T) { NetworkSettings: &container.NetworkSettingsSummary{ Networks: map[string]*network.EndpointSettings{ "network": { - IPAddress: netip.MustParseAddr(testDockerIP), + IPAddress: testDockerIP, }, }, }, @@ -315,11 +314,11 @@ func TestStreamDefaultValues(t *testing.T) { NetworkSettings: &container.NetworkSettingsSummary{ Networks: map[string]*network.EndpointSettings{ "network": { - IPAddress: netip.MustParseAddr(privIP), + IPAddress: privIP, }, }, }, - Ports: []container.PortSummary{ + Ports: []container.Port{ {Type: "udp", PrivatePort: privPort, PublicPort: pubPort}, }, } @@ -372,7 +371,7 @@ func TestImplicitExcludeDatabase(t *testing.T) { t.Run("exposed port detection", func(t *testing.T) { r, ok := makeRoutes(&container.Summary{ Names: dummyNames, - Ports: []container.PortSummary{ + Ports: []container.Port{ {Type: "tcp", PrivatePort: 5432, PublicPort: 5432}, }, })["a"] diff --git a/internal/route/provider/provider.go b/internal/route/provider/provider.go index 68fe1d9f..85dd2da0 100644 --- a/internal/route/provider/provider.go +++ b/internal/route/provider/provider.go @@ -8,7 +8,7 @@ import ( "sync" "time" - "github.com/moby/moby/client" + "github.com/docker/docker/client" "github.com/rs/zerolog" "github.com/yusing/godoxy/agent/pkg/agent" "github.com/yusing/godoxy/internal/common" diff --git a/internal/route/route.go b/internal/route/route.go index 606f58e6..b618f0c8 100644 --- a/internal/route/route.go +++ b/internal/route/route.go @@ -13,6 +13,7 @@ import ( "sync" "time" + "github.com/docker/docker/api/types/container" "github.com/rs/zerolog/log" "github.com/yusing/godoxy/agent/pkg/agent" "github.com/yusing/godoxy/internal/docker" @@ -877,7 +878,7 @@ var preferredPortOrder = []int{ 8443, } -func preferredPort(portMapping types.PortMapping) (res int) { +func preferredPort(portMapping map[int]container.Port) (res int) { for _, port := range preferredPortOrder { if _, ok := portMapping[port]; ok { return port diff --git a/internal/route/route_test.go b/internal/route/route_test.go index c84bcf82..f4664ef1 100644 --- a/internal/route/route_test.go +++ b/internal/route/route_test.go @@ -3,6 +3,7 @@ package route import ( "testing" + "github.com/docker/docker/api/types/container" "github.com/yusing/godoxy/internal/common" route "github.com/yusing/godoxy/internal/route/types" "github.com/yusing/godoxy/internal/types" @@ -136,7 +137,7 @@ func TestRouteValidate(t *testing.T) { } func TestPreferredPort(t *testing.T) { - ports := types.PortMapping{ + ports := map[int]container.Port{ 22: {PrivatePort: 22}, 1000: {PrivatePort: 1000}, 3000: {PrivatePort: 80}, diff --git a/internal/types/docker.go b/internal/types/docker.go index 1e1c3f8d..89b32e11 100644 --- a/internal/types/docker.go +++ b/internal/types/docker.go @@ -2,7 +2,7 @@ package types import ( "github.com/bytedance/sonic" - "github.com/moby/moby/api/types/container" + "github.com/docker/docker/api/types/container" "github.com/yusing/ds/ordered" "github.com/yusing/godoxy/agent/pkg/agent" "github.com/yusing/godoxy/internal/utils" @@ -12,7 +12,7 @@ import ( type ( LabelMap = map[string]any - PortMapping = map[int]container.PortSummary + PortMapping = map[int]container.Port Container struct { _ utils.NoCopy diff --git a/internal/watcher/docker_watcher.go b/internal/watcher/docker_watcher.go index 247a2a4c..7a8a8fc2 100644 --- a/internal/watcher/docker_watcher.go +++ b/internal/watcher/docker_watcher.go @@ -5,8 +5,9 @@ import ( "errors" "time" - dockerEvents "github.com/moby/moby/api/types/events" - "github.com/moby/moby/client" + dockerEvents "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/client" "github.com/rs/zerolog/log" "github.com/yusing/godoxy/internal/docker" "github.com/yusing/godoxy/internal/watcher/events" @@ -15,42 +16,23 @@ import ( type ( DockerWatcher string - DockerListOptions = client.EventsListOptions - DockerFilters = client.Filters + DockerListOptions = dockerEvents.ListOptions ) -type DockerFilter struct { - Term string - Values []string -} - -func NewDockerFilter(term string, values ...string) DockerFilter { - return DockerFilter{ - Term: term, - Values: values, - } -} - -func NewDockerFilters(filters ...DockerFilter) client.Filters { - f := make(client.Filters, len(filters)) - for _, filter := range filters { - f.Add(filter.Term, filter.Values...) - } - return f -} - // https://docs.docker.com/reference/api/engine/version/v1.47/#tag/System/operation/SystemPingHead var ( - DockerFilterContainer = NewDockerFilter("type", string(dockerEvents.ContainerEventType)) - DockerFilterStart = NewDockerFilter("event", string(dockerEvents.ActionStart)) - DockerFilterStop = NewDockerFilter("event", string(dockerEvents.ActionStop)) - DockerFilterDie = NewDockerFilter("event", string(dockerEvents.ActionDie)) - DockerFilterDestroy = NewDockerFilter("event", string(dockerEvents.ActionDestroy)) - DockerFilterKill = NewDockerFilter("event", string(dockerEvents.ActionKill)) - DockerFilterPause = NewDockerFilter("event", string(dockerEvents.ActionPause)) - DockerFilterUnpause = NewDockerFilter("event", string(dockerEvents.ActionUnPause)) + DockerFilterContainer = filters.Arg("type", string(dockerEvents.ContainerEventType)) + DockerFilterStart = filters.Arg("event", string(dockerEvents.ActionStart)) + DockerFilterStop = filters.Arg("event", string(dockerEvents.ActionStop)) + DockerFilterDie = filters.Arg("event", string(dockerEvents.ActionDie)) + DockerFilterDestroy = filters.Arg("event", string(dockerEvents.ActionDestroy)) + DockerFilterKill = filters.Arg("event", string(dockerEvents.ActionKill)) + DockerFilterPause = filters.Arg("event", string(dockerEvents.ActionPause)) + DockerFilterUnpause = filters.Arg("event", string(dockerEvents.ActionUnPause)) - optionsDefault = DockerListOptions{Filters: NewDockerFilters( + NewDockerFilter = filters.NewArgs + + optionsDefault = DockerListOptions{Filters: NewDockerFilter( DockerFilterContainer, DockerFilterStart, // DockerFilterStop, @@ -69,8 +51,8 @@ var ( } ) -func DockerFilterContainerNameID(nameOrID string) DockerFilter { - return NewDockerFilter("container", nameOrID) +func DockerFilterContainerNameID(nameOrID string) filters.KeyValuePair { + return filters.Arg("container", nameOrID) } func NewDockerWatcher(host string) DockerWatcher { @@ -98,15 +80,15 @@ func (w DockerWatcher) EventsWithOptions(ctx context.Context, options DockerList client.Close() }() - chs := client.Events(ctx, options) + cEventCh, cErrCh := client.Events(ctx, options) defer log.Debug().Str("host", client.Address()).Msg("docker watcher closed") for { select { case <-ctx.Done(): return - case msg := <-chs.Messages: + case msg := <-cEventCh: w.handleEvent(msg, eventCh) - case err := <-chs.Err: + case err := <-cErrCh: if err == nil { continue } @@ -135,7 +117,7 @@ func (w DockerWatcher) EventsWithOptions(ctx context.Context, options DockerList // connection successful, trigger reload (reload routes) eventCh <- reloadTrigger // reopen event channel - chs = client.Events(ctx, options) + cEventCh, cErrCh = client.Events(ctx, options) } } }() diff --git a/internal/watcher/events/events.go b/internal/watcher/events/events.go index f088f0c0..4fe137cd 100644 --- a/internal/watcher/events/events.go +++ b/internal/watcher/events/events.go @@ -3,7 +3,7 @@ package events import ( "fmt" - dockerEvents "github.com/moby/moby/api/types/events" + dockerEvents "github.com/docker/docker/api/types/events" ) type ( diff --git a/internal/watcher/health/monitor/docker.go b/internal/watcher/health/monitor/docker.go index 776b97d3..fba9ee44 100644 --- a/internal/watcher/health/monitor/docker.go +++ b/internal/watcher/health/monitor/docker.go @@ -5,8 +5,7 @@ import ( "net/url" "github.com/bytedance/sonic" - "github.com/moby/moby/api/types/container" - "github.com/moby/moby/client" + "github.com/docker/docker/api/types/container" "github.com/rs/zerolog/log" "github.com/yusing/godoxy/internal/docker" "github.com/yusing/godoxy/internal/types" @@ -89,7 +88,7 @@ func (mon *DockerHealthMonitor) CheckHealth() (types.HealthCheckResult, error) { defer cancel() // the actual inspect response is intercepted and returned as RequestInterceptedError - _, err := mon.client.ContainerInspect(ctx, mon.containerID, client.ContainerInspectOptions{}) + _, err := mon.client.ContainerInspect(ctx, mon.containerID) var interceptedErr *httputils.RequestInterceptedError if !httputils.AsRequestInterceptedError(err, &interceptedErr) { @@ -112,7 +111,7 @@ func (mon *DockerHealthMonitor) CheckHealth() (types.HealthCheckResult, error) { mon.numDockerFailures = 0 return types.HealthCheckResult{ Healthy: false, - Detail: "container is " + string(status), + Detail: "container is " + status, }, nil case "created": mon.numDockerFailures = 0