-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for running Docker container as non-root user using docke…
…r-entrypoint.sh (#1892) * Enabling the usage of non root user in Docker * Added docker-entrypoint.sh to .goreleaser.yml * Renamed UID to PUID and GID to PGID
- Loading branch information
Showing
3 changed files
with
73 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,27 @@ | ||
FROM --platform=$BUILDPLATFORM alpine:latest | ||
RUN apk --no-cache add ca-certificates tzdata | ||
|
||
# Install dependencies | ||
RUN apk --no-cache add ca-certificates tzdata shadow su-exec | ||
|
||
# Set the working directory | ||
WORKDIR /listmonk | ||
|
||
# Copy only the necessary files | ||
COPY listmonk . | ||
COPY config.toml.sample config.toml | ||
COPY config-demo.toml . | ||
CMD ["./listmonk"] | ||
|
||
# Copy the entrypoint script | ||
COPY docker-entrypoint.sh /usr/local/bin/ | ||
|
||
# Make the entrypoint script executable | ||
RUN chmod +x /usr/local/bin/docker-entrypoint.sh | ||
|
||
# Expose the application port | ||
EXPOSE 9000 | ||
|
||
# Set the entrypoint | ||
ENTRYPOINT ["docker-entrypoint.sh"] | ||
|
||
# Define the command to run the application | ||
CMD ["./listmonk"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#!/bin/sh | ||
|
||
set -e | ||
|
||
export PUID=${PUID:-0} | ||
export PGID=${PGID:-0} | ||
export GROUP_NAME="app" | ||
export USER_NAME="app" | ||
|
||
# This function evaluates if the supplied PGID is already in use | ||
# if it is not in use, it creates the group with the PGID | ||
# if it is in use, it sets the GROUP_NAME to the existing group | ||
create_group() { | ||
if ! getent group ${PGID} > /dev/null 2>&1; then | ||
addgroup -g ${PGID} ${GROUP_NAME} | ||
else | ||
existing_group=$(getent group ${PGID} | cut -d: -f1) | ||
export GROUP_NAME=${existing_group} | ||
fi | ||
} | ||
|
||
# This function evaluates if the supplied PUID is already in use | ||
# if it is not in use, it creates the user with the PUID and PGID | ||
create_user() { | ||
if ! getent passwd ${PUID} > /dev/null 2>&1; then | ||
adduser -u ${PUID} -G ${GROUP_NAME} -s /bin/sh -D ${USER_NAME} | ||
else | ||
existing_user=$(getent passwd ${PUID} | cut -d: -f1) | ||
export USER_NAME=${existing_user} | ||
fi | ||
} | ||
|
||
# Run the needed functions to create the user and group | ||
create_group | ||
create_user | ||
|
||
# Set the ownership of the app directory to the app user | ||
chown -R ${PUID}:${PGID} /listmonk | ||
|
||
echo "Launching listmonk with user=[${USER_NAME}] group=[${GROUP_NAME}] PUID=[${PUID}] PGID=[${PGID}]" | ||
|
||
# If running as root and PUID is not 0, then execute command as PUID | ||
# this allows us to run the container as a non-root user | ||
if [ "$(id -u)" = "0" ] && [ "${PUID}" != "0" ]; then | ||
su-exec ${PUID}:${PGID} "$@" | ||
else | ||
exec "$@" | ||
fi |