В течение одного дня я изо всех сил пытался выяснить, как создать образ с помощью API, затем я погрузился в исходный код и нашел изящное решение, которое состоит в использовании инструментов, предоставляемых докером для создания архива, вот что Я обнаружил, что это может помочь некоторым людям:
import "github.com/docker/docker/pkg/archive"
reader, err := archive.TarWithOptions("path/to/the/project/where/the/dockefile/reside", &archive.TarOptions{})
Таким образом, TarWithOptions возвращает то, что нам нужно для чтения Io.Reader в buildContext.
Чтобы пойти дальше и удовлетворить особые потребности, вы можете передать несколько аргументов как TarOptions {} :
TarOptions struct {
IncludeFiles []string
ExcludePatterns []string
Compression Compression
NoLchown bool
UIDMaps []idtools.IDMap
GIDMaps []idtools.IDMap
ChownOpts *idtools.Identity
IncludeSourceDir bool
// WhiteoutFormat is the expected on disk format for whiteout files.
// This format will be converted to the standard format on pack
// and from the standard format on unpack.
WhiteoutFormat WhiteoutFormat
// When unpacking, specifies whether overwriting a directory with a
// non-directory is allowed and vice versa.
NoOverwriteDirNonDir bool
// For each include when creating an archive, the included name will be
// replaced with the matching name from this map.
RebaseNames map[string]string
InUserNS bool
}