This is an automated email from the ASF dual-hosted git repository.

eolivelli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new be499be2a2 fix: permission denied in the docker image (#4464)
be499be2a2 is described below

commit be499be2a274b08a19dea47acfa4fa587aa232bb
Author: Zixuan Liu <node...@gmail.com>
AuthorDate: Wed Nov 13 16:13:51 2024 +0800

    fix: permission denied in the docker image (#4464)
---
 docker/Dockerfile             | 67 +++++++++++++++++++++++++++++++------------
 docker/scripts/common.sh      |  2 ++
 docker/scripts/init_bookie.sh | 14 +++++----
 3 files changed, 59 insertions(+), 24 deletions(-)

diff --git a/docker/Dockerfile b/docker/Dockerfile
index a58d0da0c4..091151b12a 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -17,6 +17,39 @@
 # under the License.
 #
 
+FROM alpine:3.20 as bk-dist
+
+ARG BK_VERSION=4.17.1
+ARG DISTRO_NAME=bookkeeper-server-${BK_VERSION}-bin
+ARG 
DISTRO_URL=https://archive.apache.org/dist/bookkeeper/bookkeeper-${BK_VERSION}/${DISTRO_NAME}.tar.gz
+
+RUN apk update && apk add gpg gpg-agent wget \
+        && cd /opt \
+        && wget -q "${DISTRO_URL}" \
+        && wget -q "${DISTRO_URL}.asc" \
+        && wget -q "${DISTRO_URL}.sha512" \
+        && sha512sum -c ${DISTRO_NAME}.tar.gz.sha512 \
+        && wget -q https://dist.apache.org/repos/dist/release/bookkeeper/KEYS \
+        && gpg --import KEYS \
+        && gpg --batch --verify "$DISTRO_NAME.tar.gz.asc" 
"$DISTRO_NAME.tar.gz" \
+        && tar -xzf "$DISTRO_NAME.tar.gz" \
+        && mv bookkeeper-server-${BK_VERSION}/ /opt/bookkeeper/ \
+        && rm -rf "$DISTRO_NAME.tar.gz" "$DISTRO_NAME.tar.gz.asc" 
"$DISTRO_NAME.tar.gz.sha512";
+
+COPY scripts /opt/bookkeeper/scripts
+
+RUN for SUBDIRECTORY in conf logs data; do \
+     mkdir -p /opt/bookkeeper/$SUBDIRECTORY; \
+     chmod -R ug+rwx /opt/bookkeeper/$SUBDIRECTORY; \
+     chown -R 10000:0 /opt/bookkeeper/$SUBDIRECTORY; \
+     done
+
+RUN for SUBDIRECTORY in scripts bin; do \
+     chmod -R g+rx /opt/bookkeeper/$SUBDIRECTORY; \
+     done
+
+RUN chmod -R o+rx /opt/bookkeeper
+
 FROM eclipse-temurin:17 as jre-build
 
 # Create a custom Java runtime
@@ -48,43 +81,39 @@ ENV DEBIAN_FRONTEND=noninteractive
 ARG UBUNTU_MIRROR=http://archive.ubuntu.com/ubuntu/
 ARG UBUNTU_SECURITY_MIRROR=http://security.ubuntu.com/ubuntu/
 
-# Download Apache Bookkeeper, untar and clean up
 RUN set -x \
     && sed -i -e 
"s|http://archive\.ubuntu\.com/ubuntu/|${UBUNTU_MIRROR:-http://archive.ubuntu.com/ubuntu/}|g"
 \
      -e 
"s|http://security\.ubuntu\.com/ubuntu/|${UBUNTU_SECURITY_MIRROR:-http://security.ubuntu.com/ubuntu/}|g"
 /etc/apt/sources.list \
     && echo 'Acquire::http::Timeout 
"30";\nAcquire::http::ConnectionAttemptDelayMsec 
"2000";\nAcquire::https::Timeout 
"30";\nAcquire::https::ConnectionAttemptDelayMsec 
"2000";\nAcquire::ftp::Timeout "30";\nAcquire::ftp::ConnectionAttemptDelayMsec 
"2000";\nAcquire::Retries "15";' > /etc/apt/apt.conf.d/99timeout_and_retries \
-    && adduser "${BK_USER}" \
     && apt-get update \
     && apt-get install -y ca-certificates apt-transport-https \
     && apt-get install -y --no-install-recommends python3 pip \
     && ln -s /usr/bin/python3 /usr/bin/python \
-    && apt-get install -y --no-install-recommends gpg gpg-agent wget sudo \
+    && apt-get install -y --no-install-recommends wget sudo \
     && apt-get -y --purge autoremove \
     && apt-get autoclean \
     && apt-get clean \
     && rm -rf /var/lib/apt/lists/* \
-    && mkdir -pv /opt \
-    && cd /opt \
-    && wget -q "${DISTRO_URL}" \
-    && wget -q "${DISTRO_URL}.asc" \
-    && wget -q "${DISTRO_URL}.sha512" \
-    && sha512sum -c ${DISTRO_NAME}.tar.gz.sha512 \
-    && wget https://dist.apache.org/repos/dist/release/bookkeeper/KEYS \
-    && gpg --import KEYS \
-    && gpg --batch --verify "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz" \
-    && tar -xzf "$DISTRO_NAME.tar.gz" \
-    && mv bookkeeper-server-${BK_VERSION}/ /opt/bookkeeper/ \
-    && rm -rf "$DISTRO_NAME.tar.gz" "$DISTRO_NAME.tar.gz.asc" 
"$DISTRO_NAME.tar.gz.sha512" \
     && pip install zk-shell
 
-WORKDIR /opt/bookkeeper
-
+# JDK
 ENV JAVA_HOME=/opt/java/openjdk
 ENV PATH="$PATH:$JAVA_HOME/bin"
 COPY --from=jre-build /javaruntime $JAVA_HOME
 
-COPY scripts /opt/bookkeeper/scripts
-RUN chmod +x -R /opt/bookkeeper/scripts/
+# BK
+ENV ZK_dataDir=${BK_HOME}/data/zookeeper/data
+ENV ZK_dataLogDir=${BK_HOME}/data/zookeeper/txlog
+ENV BK_DATA_DIR=${BK_HOME}/data
+ENV BK_journalDirectory=${BK_HOME}/data/journal
+ENV BK_ledgerDirectories=${BK_HOME}/data/ledgers
+ENV ZK_SHELL_HOME=${BK_HOME}/data
+COPY --from=bk-dist /opt/bookkeeper ${BK_HOME}
+
+WORKDIR ${BK_HOME}
+
+RUN adduser "${BK_USER}" -u 10000 --gid 0 --home ${BK_HOME} --no-create-home 
--disabled-password
+USER 10000
 
 ENTRYPOINT [ "/bin/bash", "/opt/bookkeeper/scripts/entrypoint.sh" ]
 CMD ["bookie"]
diff --git a/docker/scripts/common.sh b/docker/scripts/common.sh
index 0f745db4b4..e113e17b8e 100755
--- a/docker/scripts/common.sh
+++ b/docker/scripts/common.sh
@@ -44,6 +44,8 @@ export 
BK_dlogRootPath=${BK_dlogRootPath:-"${BK_CLUSTER_ROOT_PATH}/distributedlo
 # stream storage
 export BK_NUM_STORAGE_CONTAINERS=${BK_NUM_STORAGE_CONTAINERS:-"32"}
 export BK_STREAM_STORAGE_ROOT_PATH=${BK_STREAM_STORAGE_ROOT_PATH:-"/stream"}
+# zk-shell
+export ZK_SHELL_HOME=${ZK_SHELL_HOME:-"${HOME}"}
 
 echo "Environment Vars for bookie:"
 echo ""
diff --git a/docker/scripts/init_bookie.sh b/docker/scripts/init_bookie.sh
index 1617442d17..086fc4809f 100755
--- a/docker/scripts/init_bookie.sh
+++ b/docker/scripts/init_bookie.sh
@@ -21,25 +21,29 @@
 # */
 source ${SCRIPTS_DIR}/common.sh
 
+function run_zk_shell() {
+    HOME=${ZK_SHELL_HOME} zk-shell "$@"
+}
+
 function wait_for_zookeeper() {
     echo "wait for zookeeper"
-    until zk-shell --run-once "ls /" ${BK_zkServers}; do sleep 5; done
+    until run_zk_shell --run-once "ls /" ${BK_zkServers}; do sleep 5; done
 }
 
 function create_zk_root() {
     if [ "x${BK_CLUSTER_ROOT_PATH}" != "x" ]; then
         echo "create the zk root dir for bookkeeper at 
'${BK_CLUSTER_ROOT_PATH}'"
-        zk-shell --run-once "create ${BK_CLUSTER_ROOT_PATH} '' false false 
true" ${BK_zkServers}
+        run_zk_shell --run-once "create ${BK_CLUSTER_ROOT_PATH} '' false false 
true" ${BK_zkServers}
     fi
 }
 
 function init_cluster() {
-    zk-shell --run-once "ls ${BK_zkLedgersRootPath}/available/readonly" 
${BK_zkServers}
+    run_zk_shell --run-once "ls ${BK_zkLedgersRootPath}/available/readonly" 
${BK_zkServers}
     if [ $? -eq 0 ]; then
         echo "Cluster metadata already exists"
     else
         # Create an ephemeral zk node `bkInitLock` for use as a lock.
-        lock=`zk-shell --run-once "create ${BK_CLUSTER_ROOT_PATH}/bkInitLock 
'' true false false" ${BK_zkServers}`
+        lock=`run_zk_shell --run-once "create 
${BK_CLUSTER_ROOT_PATH}/bkInitLock '' true false false" ${BK_zkServers}`
         if [ -z "$lock" ]; then
             echo "znodes do not exist in Zookeeper for Bookkeeper. 
Initializing a new Bookkeekeper cluster in Zookeeper."
             /opt/bookkeeper/bin/bookkeeper shell initnewcluster
@@ -57,7 +61,7 @@ function init_cluster() {
             while [ ${tenSeconds} -lt 100 ]
             do
                 sleep 10
-                zk-shell --run-once "ls 
${BK_zkLedgersRootPath}/available/readonly" ${BK_zkServers}
+                run_zk_shell --run-once "ls 
${BK_zkLedgersRootPath}/available/readonly" ${BK_zkServers}
                 if [ $? -eq 0 ]; then
                     echo "Waited $tenSeconds * 10 seconds. Successfully listed 
''${BK_zkLedgersRootPath}/available/readonly'"
                     break

Reply via email to