From 4128e2c4b4b1e8aaec5b1256e2302962862a931f Mon Sep 17 00:00:00 2001 From: Toan Hoang Date: Mon, 12 Dec 2016 13:13:21 +0100 Subject: [PATCH 1/2] Added support for custom UID/GID by using enviroment variables PUID/PGID --- Dockerfile | 4 +--- docker-entrypoint.sh | 7 ++++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index f975af94..0679b290 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,8 +2,6 @@ # https://github.com/nodejs/LTS FROM node:4-slim -RUN groupadd user && useradd --create-home --home-dir /home/user -g user user - # grab gosu for easy step-down from root ENV GOSU_VERSION 1.7 RUN set -x \ @@ -38,7 +36,7 @@ RUN buildDeps=' \ && rm -rf /tmp/npm* ENV GHOST_CONTENT /var/lib/ghost -RUN mkdir -p "$GHOST_CONTENT" && chown -R user:user "$GHOST_CONTENT" +RUN mkdir -p "$GHOST_CONTENT" VOLUME $GHOST_CONTENT COPY docker-entrypoint.sh /entrypoint.sh diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index ec7842f4..a941aa9c 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -20,7 +20,12 @@ if [[ "$*" == npm*start* ]]; then ln -sf "$GHOST_CONTENT/config.js" "$GHOST_SOURCE/config.js" - chown -R user "$GHOST_CONTENT" + PUID=${PUID:-1001} + PGID=${PGID:-1001} + groupadd -o -g "$PGID" user + useradd --create-home --home-dir /home/user -g user -o -u "$PUID" user + + chown -R user:user "$GHOST_CONTENT" set -- gosu user "$@" fi From 3aae08aeeb4d14d681a36742a5ab5e46366a5fe1 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Mon, 12 Dec 2016 15:02:28 -0800 Subject: [PATCH 2/2] Allow arbitrary --user values --- Dockerfile | 9 ++++++++- docker-entrypoint.sh | 17 ++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0679b290..91d2012b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,8 @@ # https://github.com/nodejs/LTS FROM node:4-slim +RUN groupadd user && useradd --create-home --home-dir /home/user -g user user + # grab gosu for easy step-down from root ENV GOSU_VERSION 1.7 RUN set -x \ @@ -36,7 +38,12 @@ RUN buildDeps=' \ && rm -rf /tmp/npm* ENV GHOST_CONTENT /var/lib/ghost -RUN mkdir -p "$GHOST_CONTENT" +RUN mkdir -p "$GHOST_CONTENT" \ + && chown -R user:user "$GHOST_CONTENT" \ +# Ghost expects "config.js" to be in $GHOST_SOURCE, but it's more useful for +# image users to manage that as part of their $GHOST_CONTENT volume, so we +# symlink. + && ln -s "$GHOST_CONTENT/config.js" "$GHOST_SOURCE/config.js" VOLUME $GHOST_CONTENT COPY docker-entrypoint.sh /entrypoint.sh diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index a941aa9c..18f120be 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,6 +1,12 @@ #!/bin/bash set -e +# allow the container to be started with `--user` +if [[ "$*" == npm*start* ]] && [ "$(id -u)" = '0' ]; then + chown -R user "$GHOST_CONTENT" + exec gosu user "$BASH_SOURCE" "$@" +fi + if [[ "$*" == npm*start* ]]; then baseDir="$GHOST_SOURCE/content" for dir in "$baseDir"/*/ "$baseDir"/themes/*/; do @@ -17,17 +23,6 @@ if [[ "$*" == npm*start* ]]; then s!path.join\(__dirname, (.)/content!path.join(process.env.GHOST_CONTENT, \1!g; ' "$GHOST_SOURCE/config.example.js" > "$GHOST_CONTENT/config.js" fi - - ln -sf "$GHOST_CONTENT/config.js" "$GHOST_SOURCE/config.js" - - PUID=${PUID:-1001} - PGID=${PGID:-1001} - groupadd -o -g "$PGID" user - useradd --create-home --home-dir /home/user -g user -o -u "$PUID" user - - chown -R user:user "$GHOST_CONTENT" - - set -- gosu user "$@" fi exec "$@"