Задать вопрос
@AndrewRusinas

Докер ограничивает размер загружаемого на бекенд файла?

Мне кажется я где-то очень сильно туплю и совершаю банальнейшую ошибку, но на данный момент я потратил день и до сих пор не понимаю, что за дьявольщина происходит.

У меня есть простой бекенд на 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 мегабайт наводит на мысль, что это какое-то дефолтное ограничение на стороне докера, но как его настроить я нигде так и не смог найти.
  • Вопрос задан
  • 244 просмотра
Подписаться 2 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Докер ничего не знает про http, он только пробрасывает tcp-коннекты до вашего приложения. Так что проблема точно где-то в вашем коде. Скорее всего какой-то из конфигов локально у вас подключается, а в докер не пробрасывается, поэтому какие-то из ограничений внутри приложения не снимаются.

502 Bad Gateway обычно вылезает, когда ваше приложение запрос куда-то перенаправляет. Вы с файлом что делаете, сохраняете на диск или куда-то отправляете?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы