Многоступенчатая сборка докеров приложения golang не может найти файл .env

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

Файл докера выглядит следующим образом

      FROM golang:1.15-alpine as build

RUN apk add --no-cache git

ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64


WORKDIR /build

COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .

RUN go build -o main .

WORKDIR /dist

RUN cp /build/main .
RUN cp /build/.env .

WORKDIR /dist/keys
RUN cp /build/keys/* .

FROM alpine as runtime

COPY --from=build /dist/main /app/
COPY --from=build /build/keys/* /app/keys/
COPY --from=build /build/.env /app/

CMD [ "/app/main" ]

И если я создам его и запустил с помощью -it / bin / bash, я увижу, что приложение находится в нужном месте, есть файл .env и ключи.

Фактически, я могу с удовольствием запускать приложение ./main в интерактивном режиме.

Но ... когда я пытаюсь и делаю

       - docker run -it --rm --hostname dld --name dld dld                               15:57:42
2021/02/17 05:57:47 Error loading .env file

Очевидно, он не может найти файл .env.

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

Чтобы получить оболочку, я побежал

      docker run -it --rm --hostname dld --name dld dld /bin/sh

1 ответ

ОК нашел скрипт, который работает.

      FROM golang:1.15-alpine as build

RUN apk add --no-cache git

ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64


WORKDIR /build

COPY go.mod go.sum ./
RUN go mod download

COPY . .

RUN go build -o main .

WORKDIR /dist

RUN cp /build/main .
RUN cp /build/.env .

WORKDIR /dist/keys/
RUN cp /build/keys/* .

FROM scratch as runtime

WORKDIR /app/keys/
COPY --from=build /build/keys/* ./

WORKDIR /app

COPY --from=build /dist/main .
COPY --from=build /build/.env .

CMD [ "./main" ]
Другие вопросы по тегам