Мне кажется я где-то очень сильно туплю и совершаю банальнейшую ошибку, но на данный момент я потратил день и до сих пор не понимаю, что за дьявольщина происходит.
У меня есть простой бекенд на Go/Fiber. Докеризован он вот так:
FROM golang:1.22.4 AS builder
WORKDIR /build
COPY . .
WORKDIR /build/apps/Myapp/backend
RUN go mod download
ENV CGO_ENABLED=0 GOOS=linux GOARCH=amd64
RUN go build -ldflags='-s -w -extldflags "-static"' -o myapp-api .
FROM alpine as certs
RUN apk --no-cache add ca-certificates
FROM scratch
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=builder ["/build/apps/Myapp/backend/myapp-api", "/build/apps/Myapp/backend/.env.production", "/"]
COPY --from=builder ["/build/apps/Myapp/backend/templates", "/templates"]
EXPOSE 4000
ENTRYPOINT ["/myapp-api"]
CMD ["--mode", "prod"]
Сам сервер тоже сконфигурирован на приём больших файлов:
app := fiber.New(fiber.Config{
ErrorHandler: utils.ErrorHandler,
BodyLimit: 520 * 1024 * 1024,
JSONEncoder: json.Marshal,
JSONDecoder: json.Unmarshal,
})
Всё замечательно работает, если я запускаю сервер локально через go run. Лимиты нормально работают, файлы загружаются.
Однако, если я запускаю свой Dockerfile, при попытке загрузить файл больше 15 мегабайт я получаю ошибку 502 Bad Gateway (никаких nginx и прочих проксей на пути нет, запущен только докерфайл с сервером который экспозит 4000 порт). Файлы меньше 15 мегабайт грузятся нормально, а при попытке загрузить больше - запрос даже не доходит до сервера. ничего не логируется, никаких ошибок нет. Этот факт и магическое число в 15 мегабайт наводит на мысль, что это какое-то дефолтное ограничение на стороне докера, но как его настроить я нигде так и не смог найти.