@@ -266,7 +266,7 @@ RUN set -eux; \
266266FROM registry.access.redhat.com/ubi10/ubi-micro:10.0-1754556444
267267
268268ENV APP_PATH=/app/
269- ARG RUBY_VERSION=3.4.3
269+ ARG RUBY_VERSION=3.4.6
270270ENV PATH="/usr/local/bin:$PATH"
271271ENV LD_LIBRARY_PATH="/usr/lib64:/lib64:/usr/local/lib"
272272ENV OPENSSL_MODULES="/usr/lib64/ossl-modules"
@@ -289,5 +289,84 @@ RUN set -eux; \
289289USER 1000
290290
291291ENTRYPOINT ["/usr/bin/docker-entrypoint.sh" ]
292-
293292EXPOSE 9292
293+
294+ # Auto-collect shared library dependencies for Ruby, native gems, and psql
295+ RUN set -eux; \
296+ mkdir -p /runtime/usr/lib64; \
297+ targets="/usr/local/bin/ruby /usr/bin/psql /usr/bin/pg_dump /usr/bin/pg_restore" ; \
298+ if [ -d "$APP_PATH/vendor/bundle" ]; then \
299+ sofiles=$(find "$APP_PATH/vendor/bundle" -type f -name "*.so" || true); \
300+ targets="$targets $sofiles" ; \
301+ fi; \
302+ for t in $targets; do \
303+ [ -f "$t" ] || continue; \
304+ ldd "$t" | awk '/=> \/ |\/ /{print $3}' | sed -e 's/(0x[0-9a-fA-F]\+ )//g' | grep -E '^/' || true; \
305+ done | sort -u | while read -r lib; do \
306+ [ -f "$lib" ] || continue; \
307+ cp -a "$lib" /runtime/usr/lib64/ 2>/dev/null || true; \
308+ done
309+ RUN set -eux; \
310+ # Copy commonly required runtime shared libraries (no loop)
311+ cp -a /usr/lib64/libpq.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
312+ cp -a /usr/lib64/libssl.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
313+ cp -a /usr/lib64/libcrypto.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
314+ cp -a /usr/lib64/libcrypt.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
315+ cp -a /lib64/libcrypt.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
316+ cp -a /usr/lib64/libgssapi_krb5.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
317+ cp -a /usr/lib64/libkrb5.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
318+ cp -a /usr/lib64/libkrb5support.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
319+ cp -a /usr/lib64/libk5crypto.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
320+ cp -a /usr/lib64/libcom_err.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
321+ cp -a /usr/lib64/libldap.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
322+ cp -a /usr/lib64/liblber.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
323+ cp -a /usr/lib64/libsasl2.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
324+ cp -a /lib64/libgssapi_krb5.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
325+ cp -a /lib64/libkrb5.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
326+ cp -a /lib64/libkrb5support.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
327+ cp -a /lib64/libk5crypto.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
328+ cp -a /lib64/libcom_err.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
329+ cp -a /lib64/libldap*.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
330+ cp -a /lib64/liblber.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
331+ cp -a /lib64/libsasl2.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
332+ cp -a /usr/lib64/libkeyutils.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
333+ cp -a /lib64/libkeyutils.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
334+ cp -a /usr/lib64/libevent-*.so* /runtime/usr/lib64/ 2>/dev/null || true; \
335+ cp -a /lib64/libevent-*.so* /runtime/usr/lib64/ 2>/dev/null || true; \
336+ cp -a /usr/lib64/liblz4.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
337+ cp -a /lib64/liblz4.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
338+ cp -a /usr/lib64/libyaml-0.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
339+ cp -a /usr/lib64/libreadline.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
340+ cp -a /usr/lib64/libncursesw.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
341+ cp -a /usr/lib64/libz.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
342+ cp -a /usr/lib64/libzstd.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
343+ cp -a /usr/lib64/libgmp.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
344+ cp -a /usr/lib64/libffi.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
345+ cp -a /usr/lib64/libgdbm.so.* /runtime/usr/lib64/ 2>/dev/null || true; \
346+ # App
347+ cp -a $APP_PATH /runtime/app; \
348+ # Timezone data for TZInfo
349+ mkdir -p /runtime/usr/share && cp -a /usr/share/zoneinfo /runtime/usr/share/zoneinfo; \
350+ chmod +x /tmp/docker-entrypoint.sh; cp /tmp/docker-entrypoint.sh /runtime/usr/bin/docker-entrypoint.sh
351+
352+ # Runtime stage (UBI 10 micro)
353+ ENV PATH="/usr/local/bin:$PATH"
354+ ENV LD_LIBRARY_PATH="/usr/lib64:/lib64:/usr/local/lib"
355+ ENV OPENSSL_MODULES="/usr/lib64/ossl-modules"
356+ ENV OPENSSL_CONF="/etc/pki/tls/openssl.cnf"
357+ ENV HOME="/home/registry"
358+ ENV BUNDLE_PATH="/app/vendor/bundle"
359+
360+ WORKDIR $APP_PATH
361+
362+ # Copy runtime files from builder
363+ COPY --from=builder /runtime/ /
364+
365+ # Create runtime user (ubi-micro lacks useradd)
366+ RUN set -eux; \
367+ uid=1000; gid=1000; \
368+ mkdir -p /home/registry; \
369+ echo "registry:x:${uid}:${gid}:Registry User:/home/registry:/bin/sh" >> /etc/passwd; \
370+ echo "registry:x:${gid}:" >> /etc/group; \
371+ chown -R ${uid}:${gid} /app /home/registry
372+ USER 1000
0 commit comments