ENV GOSU_VERSION=1.17
ENV TINI_VERSION=v0.19.0
RUN set -eux; \
# Save list of currently installed packages for later cleanup
savedAptMark="$(apt-mark showmanual)"; \
apt-get update; \
apt-get install -y --no-install-recommends ca-certificates gnupg wget; \
rm -rf /var/lib/apt/lists/*; \
\
# Install gosu
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
chmod +x /usr/local/bin/gosu; \
gosu --version; \
gosu nobody true; \
\
# Install Tini
: "${TINI_VERSION:?TINI_VERSION is not set}"; \
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
echo "Downloading Tini version ${TINI_VERSION} for architecture ${dpkgArch}"; \
wget -O /usr/bin/tini "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-$dpkgArch"; \
wget -O /usr/bin/tini.asc "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-$dpkgArch.asc"; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7; \
gpg --batch --verify /usr/bin/tini.asc /usr/bin/tini; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME" /usr/bin/tini.asc; \
chmod +x /usr/bin/tini; \
echo "Tini version: $(/usr/bin/tini --version)"; \
\
# Clean up
apt-mark auto '.*' > /dev/null; \
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
ENV GOSU_VERSION=1.17
RUN set -eux; \
# Save list of currently installed packages for later cleanup
savedAptMark="$(apt-mark showmanual)"; \
apt-get update; \
apt-get install -y --no-install-recommends ca-certificates gnupg wget; \
rm -rf /var/lib/apt/lists/*; \
\
# Install gosu
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
chmod +x /usr/local/bin/gosu; \
gosu --version; \
gosu nobody true; \
\
# Clean up
apt-mark auto '.*' > /dev/null; \
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
ENV TINI_VERSION=v0.19.0
RUN set -eux; \
# Save list of currently installed packages for later cleanup
savedAptMark="$(apt-mark showmanual)"; \
apt-get update; \
apt-get install -y --no-install-recommends ca-certificates gnupg wget; \
rm -rf /var/lib/apt/lists/*; \
\
# Install Tini
: "${TINI_VERSION:?TINI_VERSION is not set}"; \
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
echo "Downloading Tini version ${TINI_VERSION} for architecture ${dpkgArch}"; \
wget -O /usr/bin/tini "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-$dpkgArch"; \
wget -O /usr/bin/tini.asc "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-$dpkgArch.asc"; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7; \
gpg --batch --verify /usr/bin/tini.asc /usr/bin/tini; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME" /usr/bin/tini.asc; \
chmod +x /usr/bin/tini; \
echo "Tini version: $(/usr/bin/tini --version)"; \
\
# Clean up
apt-mark auto '.*' > /dev/null; \
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
ENTRYPOINT [ "tini", "--" ]
#!/bin/bash
set -e
# Define colors
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
setup_user() {
UID="${UID:-1000}"
GID="${GID:-1000}"
UNAME="${USERNAME:-containerdx}"
# Rename group and create if necessary
group=$(getent group "${GID}" | cut -d: -f1)
if [ -n "${group}" ] && [ "${group}" != "${UNAME}" ]; then
groupmod -n "${UNAME}" "${group}"
else
groupadd -g "${GID}" "${UNAME}"
fi
# Rename user and create if necessary
user=$(getent passwd "${UID}" | cut -d: -f1)
if [ -n "${user}" ]; then
if [ "${user}" != "${UNAME}" ]; then
usermod -l "${UNAME}" "${user}"
usermod -d "/home/${UNAME}" "${UNAME}"
if [ -d "/home/${user}" ]; then
mv "/home/${user}" "/home/${UNAME}" || { echo "Failed to rename home directory"; exit 1; }
else
echo "Home directory for ${user} does not exist"
fi
fi
else
useradd -u "${UID}" -g "${GID}" -m "${UNAME}"
fi
# Set ownership of the home directory
echo -e "${GREEN}Setting ownership of home directory for ${UNAME}...${NC}"
mkdir -p "/home/${UNAME}"
chown "${UID}:${GID}" "/home/${UNAME}"
echo -e "${GREEN}Ownership set successfully for ${UNAME}!${NC}"
}
if [ "$(id -u)" -eq 0 ]; then
setup_user # Call the setup_user function
exec gosu "${UNAME}" "$@" # Switch to the specified user
else
exec "$@" # If not root, execute the command directly
fi