Skip to content

Commit be499be

Browse files
authored
fix: permission denied in the docker image (#4464)
1 parent 0376bdc commit be499be

File tree

3 files changed

+59
-24
lines changed

3 files changed

+59
-24
lines changed

docker/Dockerfile

Lines changed: 48 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,39 @@
1717
# under the License.
1818
#
1919

20+
FROM alpine:3.20 as bk-dist
21+
22+
ARG BK_VERSION=4.17.1
23+
ARG DISTRO_NAME=bookkeeper-server-${BK_VERSION}-bin
24+
ARG DISTRO_URL=https://archive.apache.org/dist/bookkeeper/bookkeeper-${BK_VERSION}/${DISTRO_NAME}.tar.gz
25+
26+
RUN apk update && apk add gpg gpg-agent wget \
27+
&& cd /opt \
28+
&& wget -q "${DISTRO_URL}" \
29+
&& wget -q "${DISTRO_URL}.asc" \
30+
&& wget -q "${DISTRO_URL}.sha512" \
31+
&& sha512sum -c ${DISTRO_NAME}.tar.gz.sha512 \
32+
&& wget -q https://dist.apache.org/repos/dist/release/bookkeeper/KEYS \
33+
&& gpg --import KEYS \
34+
&& gpg --batch --verify "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz" \
35+
&& tar -xzf "$DISTRO_NAME.tar.gz" \
36+
&& mv bookkeeper-server-${BK_VERSION}/ /opt/bookkeeper/ \
37+
&& rm -rf "$DISTRO_NAME.tar.gz" "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz.sha512";
38+
39+
COPY scripts /opt/bookkeeper/scripts
40+
41+
RUN for SUBDIRECTORY in conf logs data; do \
42+
mkdir -p /opt/bookkeeper/$SUBDIRECTORY; \
43+
chmod -R ug+rwx /opt/bookkeeper/$SUBDIRECTORY; \
44+
chown -R 10000:0 /opt/bookkeeper/$SUBDIRECTORY; \
45+
done
46+
47+
RUN for SUBDIRECTORY in scripts bin; do \
48+
chmod -R g+rx /opt/bookkeeper/$SUBDIRECTORY; \
49+
done
50+
51+
RUN chmod -R o+rx /opt/bookkeeper
52+
2053
FROM eclipse-temurin:17 as jre-build
2154

2255
# Create a custom Java runtime
@@ -48,43 +81,39 @@ ENV DEBIAN_FRONTEND=noninteractive
4881
ARG UBUNTU_MIRROR=http://archive.ubuntu.com/ubuntu/
4982
ARG UBUNTU_SECURITY_MIRROR=http://security.ubuntu.com/ubuntu/
5083

51-
# Download Apache Bookkeeper, untar and clean up
5284
RUN set -x \
5385
&& sed -i -e "s|http://archive\.ubuntu\.com/ubuntu/|${UBUNTU_MIRROR:-http://archive.ubuntu.com/ubuntu/}|g" \
5486
-e "s|http://security\.ubuntu\.com/ubuntu/|${UBUNTU_SECURITY_MIRROR:-http://security.ubuntu.com/ubuntu/}|g" /etc/apt/sources.list \
5587
&& 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 \
56-
&& adduser "${BK_USER}" \
5788
&& apt-get update \
5889
&& apt-get install -y ca-certificates apt-transport-https \
5990
&& apt-get install -y --no-install-recommends python3 pip \
6091
&& ln -s /usr/bin/python3 /usr/bin/python \
61-
&& apt-get install -y --no-install-recommends gpg gpg-agent wget sudo \
92+
&& apt-get install -y --no-install-recommends wget sudo \
6293
&& apt-get -y --purge autoremove \
6394
&& apt-get autoclean \
6495
&& apt-get clean \
6596
&& rm -rf /var/lib/apt/lists/* \
66-
&& mkdir -pv /opt \
67-
&& cd /opt \
68-
&& wget -q "${DISTRO_URL}" \
69-
&& wget -q "${DISTRO_URL}.asc" \
70-
&& wget -q "${DISTRO_URL}.sha512" \
71-
&& sha512sum -c ${DISTRO_NAME}.tar.gz.sha512 \
72-
&& wget https://dist.apache.org/repos/dist/release/bookkeeper/KEYS \
73-
&& gpg --import KEYS \
74-
&& gpg --batch --verify "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz" \
75-
&& tar -xzf "$DISTRO_NAME.tar.gz" \
76-
&& mv bookkeeper-server-${BK_VERSION}/ /opt/bookkeeper/ \
77-
&& rm -rf "$DISTRO_NAME.tar.gz" "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz.sha512" \
7897
&& pip install zk-shell
7998

80-
WORKDIR /opt/bookkeeper
81-
99+
# JDK
82100
ENV JAVA_HOME=/opt/java/openjdk
83101
ENV PATH="$PATH:$JAVA_HOME/bin"
84102
COPY --from=jre-build /javaruntime $JAVA_HOME
85103

86-
COPY scripts /opt/bookkeeper/scripts
87-
RUN chmod +x -R /opt/bookkeeper/scripts/
104+
# BK
105+
ENV ZK_dataDir=${BK_HOME}/data/zookeeper/data
106+
ENV ZK_dataLogDir=${BK_HOME}/data/zookeeper/txlog
107+
ENV BK_DATA_DIR=${BK_HOME}/data
108+
ENV BK_journalDirectory=${BK_HOME}/data/journal
109+
ENV BK_ledgerDirectories=${BK_HOME}/data/ledgers
110+
ENV ZK_SHELL_HOME=${BK_HOME}/data
111+
COPY --from=bk-dist /opt/bookkeeper ${BK_HOME}
112+
113+
WORKDIR ${BK_HOME}
114+
115+
RUN adduser "${BK_USER}" -u 10000 --gid 0 --home ${BK_HOME} --no-create-home --disabled-password
116+
USER 10000
88117

89118
ENTRYPOINT [ "/bin/bash", "/opt/bookkeeper/scripts/entrypoint.sh" ]
90119
CMD ["bookie"]

docker/scripts/common.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export BK_dlogRootPath=${BK_dlogRootPath:-"${BK_CLUSTER_ROOT_PATH}/distributedlo
4444
# stream storage
4545
export BK_NUM_STORAGE_CONTAINERS=${BK_NUM_STORAGE_CONTAINERS:-"32"}
4646
export BK_STREAM_STORAGE_ROOT_PATH=${BK_STREAM_STORAGE_ROOT_PATH:-"/stream"}
47+
# zk-shell
48+
export ZK_SHELL_HOME=${ZK_SHELL_HOME:-"${HOME}"}
4749

4850
echo "Environment Vars for bookie:"
4951
echo ""

docker/scripts/init_bookie.sh

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,29 @@
2121
# */
2222
source ${SCRIPTS_DIR}/common.sh
2323

24+
function run_zk_shell() {
25+
HOME=${ZK_SHELL_HOME} zk-shell "$@"
26+
}
27+
2428
function wait_for_zookeeper() {
2529
echo "wait for zookeeper"
26-
until zk-shell --run-once "ls /" ${BK_zkServers}; do sleep 5; done
30+
until run_zk_shell --run-once "ls /" ${BK_zkServers}; do sleep 5; done
2731
}
2832

2933
function create_zk_root() {
3034
if [ "x${BK_CLUSTER_ROOT_PATH}" != "x" ]; then
3135
echo "create the zk root dir for bookkeeper at '${BK_CLUSTER_ROOT_PATH}'"
32-
zk-shell --run-once "create ${BK_CLUSTER_ROOT_PATH} '' false false true" ${BK_zkServers}
36+
run_zk_shell --run-once "create ${BK_CLUSTER_ROOT_PATH} '' false false true" ${BK_zkServers}
3337
fi
3438
}
3539

3640
function init_cluster() {
37-
zk-shell --run-once "ls ${BK_zkLedgersRootPath}/available/readonly" ${BK_zkServers}
41+
run_zk_shell --run-once "ls ${BK_zkLedgersRootPath}/available/readonly" ${BK_zkServers}
3842
if [ $? -eq 0 ]; then
3943
echo "Cluster metadata already exists"
4044
else
4145
# Create an ephemeral zk node `bkInitLock` for use as a lock.
42-
lock=`zk-shell --run-once "create ${BK_CLUSTER_ROOT_PATH}/bkInitLock '' true false false" ${BK_zkServers}`
46+
lock=`run_zk_shell --run-once "create ${BK_CLUSTER_ROOT_PATH}/bkInitLock '' true false false" ${BK_zkServers}`
4347
if [ -z "$lock" ]; then
4448
echo "znodes do not exist in Zookeeper for Bookkeeper. Initializing a new Bookkeekeper cluster in Zookeeper."
4549
/opt/bookkeeper/bin/bookkeeper shell initnewcluster
@@ -57,7 +61,7 @@ function init_cluster() {
5761
while [ ${tenSeconds} -lt 100 ]
5862
do
5963
sleep 10
60-
zk-shell --run-once "ls ${BK_zkLedgersRootPath}/available/readonly" ${BK_zkServers}
64+
run_zk_shell --run-once "ls ${BK_zkLedgersRootPath}/available/readonly" ${BK_zkServers}
6165
if [ $? -eq 0 ]; then
6266
echo "Waited $tenSeconds * 10 seconds. Successfully listed ''${BK_zkLedgersRootPath}/available/readonly'"
6367
break

0 commit comments

Comments
 (0)