From c2d221ab92f9e797114d2e9c243848431cc22769 Mon Sep 17 00:00:00 2001 From: Klaus Post Date: Thu, 7 Nov 2019 17:24:00 +0300 Subject: [PATCH] Update Dockerfile (#8) --- Dockerfile | 12 +++++------ cmd/docker-entrypoint.sh | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 cmd/docker-entrypoint.sh diff --git a/Dockerfile b/Dockerfile index 66eee9e..18301dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.12-alpine +FROM golang:1.13-alpine LABEL maintainer="vivino.com" @@ -7,15 +7,13 @@ ENV CGO_ENABLED 0 ENV GO111MODULE on ENV BASEPACKAGE github.com/Vivino/rankdb ENV PACKAGEPATH /go/src/${BASEPACKAGE}/ +ENV GOPROXY https://proxy.golang.org WORKDIR ${PACKAGEPATH} -# TODO: Remove when github.com/Vivino/rankdb is available. -COPY . ${PACKAGEPATH} - RUN \ apk add --no-cache git && \ - go get ${BASEPACKAGE} || true && \ + go get ${BASEPACKAGE} && \ go build -v -o=/go/bin/rankdb ${BASEPACKAGE}/cmd/rankdb && \ go build -v -o=/go/bin/rankdb-cli ${BASEPACKAGE}/api/tool/rankdb-cli @@ -25,8 +23,8 @@ EXPOSE 8080 COPY --from=0 /go/bin/rankdb /usr/bin/rankdb COPY --from=0 /go/bin/rankdb-cli /usr/bin/rankdb-cli -COPY api/conf/conf.stub.toml /conf/conf.toml -COPY deploy/docker-entrypoint.sh /usr/bin/ +COPY conf/conf.stub.toml /conf/conf.toml +COPY cmd/docker-entrypoint.sh /usr/bin/ VOLUME ["/data"] VOLUME ["/conf"] diff --git a/cmd/docker-entrypoint.sh b/cmd/docker-entrypoint.sh new file mode 100644 index 0000000..22b6f56 --- /dev/null +++ b/cmd/docker-entrypoint.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +export RANKDB_USERNAME=${RANKDB_USERNAME:-"rankdb"} +export RANKDB_GROUPNAME=${RANKDB_GROUPNAME:-"rankdb"} + + +docker_set_uid_gid() { + addgroup -S "$RANKDB_GROUPNAME" >/dev/null 2>&1 && \ + adduser -S -G "$RANKDB_GROUPNAME" "$RANKDB_USERNAME" >/dev/null 2>&1 +} + +# su-exec to requested user, if user cannot be requested +# existing user is used automatically. +docker_switch_user() { + owner=$(check-user "$@") + if [ "${owner}" != "${RANKDB_USERNAME}:${RANKDB_GROUPNAME}" ]; then + ## Print the message only if we are not using non-default username:groupname. + if [ "${RANKDB_USERNAME}:${RANKDB_GROUPNAME}" != "rankdb:rankdb" ]; then + echo "Requested username/group ${RANKDB_USERNAME}:${RANKDB_GROUPNAME} cannot be used" + echo "Found existing data with user ${owner}, we will continue and use ${owner} instead." + return + fi + fi + # check if su-exec is allowed, if yes proceed proceed. + if su-exec "${owner}" "/bin/ls" >/dev/null 2>&1; then + exec su-exec "${owner}" "$@" + fi + # fallback + exec "$@" +} + +if [ "${1}" != "rankdb" ] && [ "${1}" != "rankdb-cli" ]; then + if [ -n "${1}" ]; then + set -- rankdb "$@" + fi +fi + +## User Input UID and GID +docker_set_uid_gid + +## Switch to user if applicable. +docker_switch_user "$@" +