From 4f777d7438378fe0b6dcc9f140a7eb469f9f0b0b Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Thu, 24 Sep 2026 13:07:41 -0700 Subject: [PATCH] Feature: propagate resolved secrets to interactive container shells (#14254) docker exec bash bypasses s6, so *_FILE secrets resolved by init-env-file into /run/s6/container_environment aren't visible even though s6 services and management wrappers already see them via with-contenv. Add /etc/profile.d/contenv.sh, sourced by both login and non-login interactive bash shells, to export those resolved values into the shell. --- Dockerfile | 4 +++- docker/rootfs/etc/profile.d/contenv.sh | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100755 docker/rootfs/etc/profile.d/contenv.sh diff --git a/Dockerfile b/Dockerfile index 5be2e00dd..fcc489ff9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -171,7 +171,9 @@ RUN set -eux \ && cp /etc/ImageMagick-6/paperless-policy.xml /etc/ImageMagick-6/policy.xml \ && echo "Cleaning up image layer" \ && rm --force --verbose *.deb \ - && rm --recursive --force --verbose /var/lib/apt/lists/* + && rm --recursive --force --verbose /var/lib/apt/lists/* \ + && echo "Configuring interactive shells to source the s6 container environment" \ + && echo '. /etc/profile.d/contenv.sh' >> /etc/bash.bashrc WORKDIR /usr/src/paperless/src/ diff --git a/docker/rootfs/etc/profile.d/contenv.sh b/docker/rootfs/etc/profile.d/contenv.sh new file mode 100755 index 000000000..be5f3ba1c --- /dev/null +++ b/docker/rootfs/etc/profile.d/contenv.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Source s6 container environment for interactive shells. +# Ensures variables resolved from *_FILE secret injection are visible +# when using 'docker exec bash'. Does not affect s6 services (those +# use with-contenv directly). Has no effect in non-container contexts +# because the directory will not exist. +# Note: sh/dash shells opened via 'docker exec sh' are not covered; +# only bash-based sessions benefit from this file. +_pngx_contenv="/run/s6/container_environment" +if [ -d "${_pngx_contenv}" ]; then + for _pngx_f in "${_pngx_contenv}"/*; do + [ -f "${_pngx_f}" ] || continue + _pngx_name=$(basename "${_pngx_f}") + _pngx_val=$(cat "${_pngx_f}") + export "${_pngx_name}=${_pngx_val}" + done +fi +unset _pngx_contenv _pngx_f _pngx_name _pngx_val