Fix: образ netrunner-proxy падал в рестарт-луп — GLIBC_2.38 not found
Build & Push Proxy Image / build (push) Successful in 4m51s
Build & Push Proxy Image / build (push) Successful in 4m51s
Dockerfile просто копировал бинарник, собранный ОТДЕЛЬНЫМ шагом прямо на CI-раннере (ubuntu-24.04, glibc 2.39), в рантайм-образ debian:bookworm-slim (glibc 2.36) — любой запуск падал: "GLIBC_2.38 not found". Затронуто абсолютно любое развёртывание этого образа, не конкретная нода. Теперь Dockerfile компилирует Rust ВНУТРИ себя, на том же bookworm, что и рантайм (multi-stage + cargo-chef, тот же паттерн, что в netrunner-backend/Dockerfile) — версии glibc гарантированно совпадают независимо от ОС раннера. build.yml больше не собирает бинарник отдельным шагом, только docker build; добавлен registry-кэш слоёв (type=gha требует GitHub Actions Cache, у self-hosted act_runner его нет — см. аналогичный фикс в netrunner-backend этой сессии). Проверено локально: docker build проходит чисто, ./netrunner-proxy --help запускается без ошибок glibc (до фикса — падал сразу).
This commit is contained in:
+10
-12
@@ -1,8 +1,10 @@
|
||||
# Собирает netrunner-server (release-бинарник) и пушит Docker-образ во
|
||||
# встроенный Container Registry самой Gitea (gitea.netrunner-vpn.com), не
|
||||
# ghcr.io. Dockerfile сам не компилирует Rust — он просто копирует уже
|
||||
# готовый target/release/netrunner-server (см. Dockerfile), поэтому cargo
|
||||
# build идёт отдельным шагом перед docker build, не внутри него.
|
||||
# ghcr.io. Dockerfile теперь компилирует Rust ВНУТРИ себя (multi-stage,
|
||||
# см. Dockerfile) — раньше бинарник собирался отдельным шагом прямо на
|
||||
# CI-раннере (glibc раннера) и просто копировался в рантайм-образ
|
||||
# (glibc bookworm-slim), рассинхрон версий ронял прод: "GLIBC_2.38 not
|
||||
# found". Раздельная сборка на раннере убрана — только docker build.
|
||||
#
|
||||
# Нужен секрет GT_REGISTRY_TOKEN — токен Gitea с правом write:package,
|
||||
# тот же, что и в netrunner-backend/netrunner-landing (пакеты в Gitea
|
||||
@@ -22,15 +24,6 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Cache cargo
|
||||
uses: Swatinem/rust-cache@v2
|
||||
|
||||
- name: Build release binary
|
||||
run: cargo build --release -p netrunner-server
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
@@ -48,3 +41,8 @@ jobs:
|
||||
file: ./Dockerfile
|
||||
push: true
|
||||
tags: gitea.netrunner-vpn.com/nineap/netrunner-proxy:latest
|
||||
# type=gha требует GitHub Actions Cache — self-hosted act_runner его
|
||||
# не реализует (см. аналогичный фикс в netrunner-backend/build.yml
|
||||
# этой же сессии); type=registry работает везде без спецсервиса.
|
||||
cache-from: type=registry,ref=gitea.netrunner-vpn.com/nineap/netrunner-proxy:cache
|
||||
cache-to: type=registry,ref=gitea.netrunner-vpn.com/nineap/netrunner-proxy:cache,mode=max
|
||||
|
||||
+25
-3
@@ -1,12 +1,34 @@
|
||||
# Минимальный чистый образ рантайма
|
||||
# syntax=docker/dockerfile:1.7
|
||||
|
||||
# Раньше этот Dockerfile просто копировал уже собранный на CI-раннере
|
||||
# бинарник (target/release/netrunner-server) в debian:bookworm-slim — а
|
||||
# раннер (ubuntu-24.04, glibc 2.39) собирал его с более новым glibc, чем
|
||||
# несёт bookworm-slim (glibc 2.36). В рантайме это падало циклом рестартов:
|
||||
# "GLIBC_2.38 not found". Компилируем внутри контейнера на той же базе
|
||||
# (bookworm), что и рантайм — версии glibc гарантированно совпадают,
|
||||
# независимо от того, какая ОС у раннера CI (см. тот же паттерн в
|
||||
# netrunner-backend/Dockerfile).
|
||||
FROM rust:1-bookworm AS chef
|
||||
RUN cargo install cargo-chef --locked
|
||||
WORKDIR /app
|
||||
|
||||
FROM chef AS planner
|
||||
COPY . .
|
||||
RUN cargo chef prepare --recipe-path recipe.json
|
||||
|
||||
FROM chef AS builder
|
||||
COPY --from=planner /app/recipe.json recipe.json
|
||||
RUN cargo chef cook --release --recipe-path recipe.json -p netrunner-server
|
||||
COPY . .
|
||||
RUN cargo build --release -p netrunner-server
|
||||
|
||||
FROM debian:bookworm-slim
|
||||
WORKDIR /app
|
||||
|
||||
# Ставим системные сертификаты, чтобы прокси мог работать с сетью по HTTPS
|
||||
RUN apt-get update && apt-get install -y ca-certificates libssl3 && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Просто копируем уже скомпилированный тобой локально бинарник из wsl-папки target
|
||||
COPY target/release/netrunner-server /app/netrunner-proxy
|
||||
COPY --from=builder /app/target/release/netrunner-server /app/netrunner-proxy
|
||||
|
||||
EXPOSE 443/udp
|
||||
EXPOSE 443/tcp
|
||||
|
||||
Reference in New Issue
Block a user