Укажите на локальную зависимость от удаленного базового образа при построении Go программы Docker образа - PullRequest
0 голосов
/ 19 июня 2020

Обратите внимание, что я новичок в разработке Golang и Docker. Я уже спрашивал об этом в другом месте и пытался прочитать документацию, но не могу найти никакого решения.

Проблема и код

У меня есть два репозитория /home/experience/keep-ecdsa и /home/experience/keep-core, которые я раздвоил из этот проект и клонирован локально.

Я пытаюсь создать образ docker для keep-ecdsa локально. Вот ссылка на мое форк-репо .

Есть некоторые keep-core зависимости, и я хочу указать на свое локальное keep-core репо. Таким образом, я изменил свой go.mod на:

module github.com/keep-network/keep-ecdsa
go 1.13
replace (
    //unrelated stuff...
    github.com/keep-network/keep-core => /home/experience/keep-core
)
require (
    //unrelated stuff...
    github.com/keep-network/keep-core v1.1.3
)

DOCKERFILE начинается следующим образом (щелкните здесь, чтобы увидеть полный файл) :

FROM golang:1.13.8-alpine3.10 AS runtime

ENV APP_NAME=keep-ecdsa \
    BIN_PATH=/usr/local/bin

FROM runtime AS gobuild

ENV GOPATH=/go \
    GOBIN=/go/bin \
    APP_NAME=keep-ecdsa \
    APP_DIR=/go/src/github.com/keep-network/keep-ecdsa \
    BIN_PATH=/usr/local/bin \
    # GO111MODULE required to support go modules
    GO111MODULE=on
    //rest of the linked DOCKERFILE

При запуске docker build . я получаю сообщение об ошибке ниже, которое возникает на этапе RUN go mod download из DOCKERFILE.

Step 13/27 : RUN go mod download
--> Running in 88839fc42d4e
go: github.com/keep-network/keep-core@v1.1.3: parsing /home/experience/keep-core/go.mod: open /home/experience/keep-core/go.mod: no such file or directory
The command '/bin/sh -c go mod download' returned a non-zero code: 1

То, что я пытался, и ведущего

Я пробовал to:

  • Измените мой GOPATH в DOCKERFILE на различные абсолютные локальные пути fs
  • Сделайте мой APPDIR в DOCKERFILE указателем на мой абсолютный локальный путь /home/experience/keep-ecdsa
  • Измените путь в операторе replace ( ) в go.mod на различные пути (абсолютный локальный, относительно GOPATH, и т. Д. c

Кто-то дал мне эту подсказку:

вы находитесь внутри golang:1.13.8-alpine3.10 базового образа, поэтому внутри него нет /home/experience/keep-core, так как это только на вашем локальном fs

Но я все еще понятия не имею как добиться того, что я хочу. Возможно, заменить оператор FROM ... AS runtine в DOCKERFILE каким-нибудь локальным базовым образом? Но как мне найти такое подходящее базовое изображение и не буду он изменяет остальные инструкции DOCKERFILE?

Имейте в виду, что я собираюсь внести локальные изменения в keep-core зависимости и мне нужно будет их протестировать, поэтому решение, которое будет состоять из replace (github.com/mygithubprofile/keep-core) неудовлетворительно.

Заранее благодарю

1 Ответ

1 голос
/ 19 июня 2020

вы находитесь внутри базового образа golang: 1.13.8-alpine3.10, поэтому внутри него нет / home / experience / keep-core, так как это только на вашем локальном fs

Из того, что я вижу в файле, вы не скопировали каталог /home/experience/keep-core на вашем компьютере в изображение docker, поэтому возникает ошибка, поскольку этот каталог еще не существует.

Docker не может переходить по ссылкам за пределами каталога текущего контекста, поэтому, если вы не хотите редактировать replace (github.com/mygithubprofile/keep-core), вы можете переместить свой DockerFile в /home/experience/ и использовать команду COPY для копирования папки keep-core из вашего локальный компьютер в образ docker.

RUN mkdir -p /home/experience/keep-core
COPY ./keep-core /home/experience/keep-core

Однако, если вы хотите, чтобы DockerFile оставался в /home/experience/keep-ecdsa, вы можете переместить папку keep-core в папку keep-ecdsa и игнорировать ее в .gitignore файл. Затем обновите

replace (
    //unrelated stuff...
    github.com/keep-network/keep-core => /home/experience/keep-core
)

ТО

replace (
    //unrelated stuff...
    github.com/keep-network/keep-core => /home/experience/keep-ecdsa/keep-core
)
...