Ошибка при поиске пути к докер-файлу golang - PullRequest
0 голосов
/ 30 августа 2018

я пытаюсь создать образ докера с моим проектом golang

Я использую следующее

#build stage
FROM golang:alpine as builder
WORKDIR /go/src/app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .
RUN apk add --no-cache git


#final stage
FROM alpine:latest
RUN apk --no-cache add ca-certificates
COPY --from=builder /go/bin/app /app
ENTRYPOINT ./app
LABEL Name=fzr-dbc  Version=0.0.1
EXPOSE 3000

Эта сборка не выполняется в моем файле main.go, который выглядит следующим образом

package main

import (
    "fzr-dbc/cmd/tsr”
)

func main() {
    tsr.Execute()
}

когда я запускаю команду docker build -t fzr . Ошибка:

main.go:4:2: cannot find package "fzr-dbc/cmd/tsr” in any of:
        /go/src/app/vendor/fzr-dbc/cmd/tsr (vendor tree)
        /usr/local/go/src/fzr-dbc/cmd/tsr (from $GOROOT)
        /go/src/fzr-dbc/cmd/tsrs (from $GOPATH)

Ошибка, поскольку он не находит путь к моему проекту, что здесь может отсутствовать?

Файл Docker находится в моем корневом проекте fzr, и я запускаю сборку Docker оттуда

1 Ответ

0 голосов
/ 30 августа 2018

Вы используете go build в вашем Dockerfile:

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .

Для этого необходимо установить все свои зависимости для его построения.

Чтобы исправить это, либо:

  1. Создайте двоичный файл на своем хосте и COPY двоичный файл непосредственно в докер; или
  2. Установка зависимостей внутри докера как часть RUN процессов:
    • Для Go до 1.11 вам нужно переместить исходный код вашего проекта в соответствующий каталог в GOPATH. Затем в этой папке запустите go get -u ./...
    • Для Go 1.11+ вам нужно использовать Go 1.11 с правильно определенными go.mod и go.sum. Затем вы можете использовать команду go mod download для загрузки всех зависимостей в кеш пакета Go внутри образа вашего докера.
...