Многоступенчатый образ сборки не работает, в то время как нормальная сборка делает
У меня есть Dockerfile, который создает проект golang (который слушает поток Twitter и перечисляет твиты по какому-либо фильтру) из последнего изображения docker golang, прямо сейчас 1.10.3, примерно так:
FROM golang:1.10.3
COPY . /destination/
WORKDIR /destination/
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
CMD ["./main"]
и когда я запускаю образ, созданный командой сборки docker, он запускается без проблем. Проблема в том, что размер изображения составляет около 900 МБ.
Когда я пытаюсь собрать докер с многоступенчатой сборкой, вот так:
FROM golang:1.10.3-alpine3.7 as builder
...
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
FROM busybox
COPY --from=builder /go/src/github.com/mygithubname/ /
WORKDIR /path-to-the-main-file/
CMD ["./main"]
Образ докера успешно создан и работает, но он просто не показывает мне твиты, когда они публикуются, и также не показывает никаких ошибок, что является наиболее запутанной частью. Даже когда я ssh в работающий контейнер и пинг Google, он показывает все, как должно быть.
У кого-нибудь есть подсказки, как я могу отладить эту проблему или получить еще журналы из работающего образа Docker?
1 ответ
Мало вещей
1) контейнер вышел? Если вы делаете Docker PS, кажется, он работает.
2) Вы проверили журнал докера {идентификатор контейнера}
3) Отражает ли /go/src/github.com/mygithubname/ местоположение сборки на первом этапе док-контейнера? Пример файла Docker, в котором копия отражает рабочий каталог среды сборки:
FROM golang AS build-env
ADD . /src/project
WORKDIR /src/project
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
# final stage
FROM busybox
WORKDIR /app
COPY --from=build-env /src/project/ .
CMD ["./main"]