mirror of
https://github.com/bytedream/docker4ssh.git
synced 2025-06-27 09:50:31 +02:00
Initial commit
This commit is contained in:
41
server/docker/image.go
Normal file
41
server/docker/image.go
Normal file
@ -0,0 +1,41 @@
|
||||
package docker
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/api/types/filters"
|
||||
"github.com/docker/docker/client"
|
||||
"io"
|
||||
)
|
||||
|
||||
type Image struct {
|
||||
ref string
|
||||
}
|
||||
|
||||
func (i Image) Ref() string {
|
||||
return i.ref
|
||||
}
|
||||
|
||||
// NewImage creates a new Image instance
|
||||
func NewImage(ctx context.Context, cli *client.Client, ref string) (Image, io.ReadCloser, error) {
|
||||
summary, err := cli.ImageList(ctx, types.ImageListOptions{
|
||||
Filters: filters.NewArgs(filters.Arg("reference", ref)),
|
||||
})
|
||||
if err != nil {
|
||||
return Image{}, nil, err
|
||||
}
|
||||
|
||||
if len(summary) > 0 {
|
||||
return Image{
|
||||
ref: ref,
|
||||
}, nil, nil
|
||||
} else {
|
||||
out, err := cli.ImagePull(ctx, ref, types.ImagePullOptions{})
|
||||
if err != nil {
|
||||
return Image{}, nil, err
|
||||
}
|
||||
return Image{
|
||||
ref: ref,
|
||||
}, out, nil
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user