Сбой копирования при создании образа докера с использованием Golang API - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь создать Docker Image, используя официальный GO API, но у меня возникла проблема в этой строке:

COPY packages /tmp/packages

из

"message":"COPY failed: stat /var/lib/docker/tmp/docker-builder107969114/packages: no such file or directory"

Где пакеты - это папка в каталоге, в котором находится файл Docker.

Если я просто собираю сборку образа докера по пути к Dockerfile, он собирается как положено.

Я попытался добавить WORKDIR к пути, где Dockerfile находится в реальном Dockerfile, но все равно кажется, что он не может найти папку.

Кто-нибудь знает, что здесь происходит?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

В течение одного дня я изо всех сил пытался выяснить, как создать образ с помощью 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 }

0 голосов
/ 22 мая 2018

Если кто-то еще сталкивается с этой проблемой, если у вас есть какие-либо монтирования для конфигурации вашего хоста, например:

&container.HostConfig{
    Mounts:[]mount.Mount{
        {
            Source: .../somePath,
            Target: .../somePath,
        }
    }
}

То, что вы создали образ с правильным контекстом сборки:

cli.ImageBuild(context.Background(), tarFile, types.ImageBuildOptions{})

Что внутри tarFile, который вы передаете, ... / somePath существует.

...