This is an automated email from the ASF dual-hosted git repository.
mchades pushed a commit to branch branch-1.3
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/branch-1.3 by this push:
new c5b21f29e0 [Cherry-pick to branch-1.3] [#10556] improvement(docker):
Move container entrypoint to docker/ and run JVM in foreground (#11272) (#11312)
c5b21f29e0 is described below
commit c5b21f29e0c9992c8adba32f3d6e8181a68f0913
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Jun 1 12:19:36 2026 +0800
[Cherry-pick to branch-1.3] [#10556] improvement(docker): Move container
entrypoint to docker/ and run JVM in foreground (#11272) (#11312)
**Cherry-pick Information:**
- Original commit: 73f1d70d340ca7a1e45c3e94069ac0c68582c231
- Target branch: `branch-1.3`
- Status: ✅ Clean cherry-pick (no conflicts)
Co-authored-by: Jerry Shao <[email protected]>
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
---
bin/gravitino.sh.template | 2 +-
dev/docker/gravitino/Dockerfile | 4 +--
.../{start-gravitino.sh => docker-entrypoint.sh} | 27 ++++++++++----
dev/docker/gravitino/gravitino-dependency.sh | 15 ++++----
dev/docker/gravitino/start-gravitino.sh | 42 +++++-----------------
5 files changed, 39 insertions(+), 51 deletions(-)
diff --git a/bin/gravitino.sh.template b/bin/gravitino.sh.template
index d6ca1a8957..1ba2692cb6 100755
--- a/bin/gravitino.sh.template
+++ b/bin/gravitino.sh.template
@@ -126,7 +126,7 @@ function start() {
}
function run() {
- ${JAVA_RUNNER} ${JAVA_OPTS} ${GRAVITINO_DEBUG_OPTS} -cp
${GRAVITINO_CLASSPATH} ${GRAVITINO_SERVER_NAME}
+ exec ${JAVA_RUNNER} ${JAVA_OPTS} ${GRAVITINO_DEBUG_OPTS} -cp
${GRAVITINO_CLASSPATH} ${GRAVITINO_SERVER_NAME}
}
function stop() {
diff --git a/dev/docker/gravitino/Dockerfile b/dev/docker/gravitino/Dockerfile
index b03e15114d..81c167ae4f 100644
--- a/dev/docker/gravitino/Dockerfile
+++ b/dev/docker/gravitino/Dockerfile
@@ -27,7 +27,7 @@ WORKDIR /opt/gravitino
COPY packages/gravitino /opt/gravitino
RUN chmod -R g+rwX /opt/gravitino \
- && chmod +x /opt/gravitino/bin/start-gravitino.sh \
+ && chmod +x /opt/gravitino/docker/docker-entrypoint.sh \
&& useradd -u 1000 -g 0 -M -s /sbin/nologin gravitino
EXPOSE 8090
@@ -35,4 +35,4 @@ EXPOSE 9001
USER 1000
-ENTRYPOINT ["/bin/bash", "/opt/gravitino/bin/start-gravitino.sh"]
+ENTRYPOINT ["/bin/bash", "/opt/gravitino/docker/docker-entrypoint.sh"]
diff --git a/dev/docker/gravitino/start-gravitino.sh
b/dev/docker/gravitino/docker-entrypoint.sh
old mode 100755
new mode 100644
similarity index 57%
copy from dev/docker/gravitino/start-gravitino.sh
copy to dev/docker/gravitino/docker-entrypoint.sh
index 5d43d54576..dac15a44f9
--- a/dev/docker/gravitino/start-gravitino.sh
+++ b/dev/docker/gravitino/docker-entrypoint.sh
@@ -17,16 +17,27 @@
# specific language governing permissions and limitations
# under the License.
#
+# Docker container entrypoint for the Gravitino server image.
+# This script performs container-specific initialization before starting the
server:
+# 1. Rewrites gravitino.conf from environment variables (skipped if
SKIP_CONFIG_REWRITE=true).
+# 2. Creates symlinks for optional JDBC drivers placed in
/opt/gravitino/jdbc-drivers/.
+# 3. Creates symlinks for optional Iceberg bundle jars placed in
/opt/gravitino/iceberg-bundles/.
+# 4. Starts the Gravitino server in the foreground (replacing this shell
process).
+#
+# This script is NOT intended to be called directly. It is set as the Docker
ENTRYPOINT and
+# is invoked automatically when the container starts.
+# For non-Docker deployments, use bin/gravitino.sh {start|stop|restart|status}
instead.
set -ex
bin_dir="$(dirname "${BASH_SOURCE-$0}")"
-gravitino_dir="$(cd "${bin_dir}/../">/dev/null; pwd)"
+gravitino_dir="$(cd "${bin_dir}/../" > /dev/null; pwd)"
-cd ${gravitino_dir}
+cd "${gravitino_dir}"
-# Skip config rewrite if SKIP_CONFIG_REWRITE is set (e.g., in Kubernetes)
+# Skip config rewrite if SKIP_CONFIG_REWRITE is set (e.g., in Kubernetes where
config
+# is mounted via ConfigMap and should not be overwritten by environment
variables).
if [ "${SKIP_CONFIG_REWRITE}" != "true" ]; then
- python bin/rewrite_gravitino_server_config.py
+ python docker/rewrite_gravitino_server_config.py
fi
# Create soft links for JDBC drivers
@@ -46,10 +57,14 @@
iceberg_rest_lib_dir="${gravitino_dir}/iceberg-rest-server/libs"
if [ -d "${iceberg_bundle_dir}" ]; then
mkdir -p "${lakehouse_iceberg_lib_dir}"
mkdir -p "${iceberg_rest_lib_dir}"
- find "${iceberg_bundle_dir}" -name '*.jar' -exec ln -sfv {}
"${lakehouse_iceberg_lib_dir}" \; -exec ln -sfv {} "${iceberg_rest_lib_dir}" \;
+ find "${iceberg_bundle_dir}" -name '*.jar' \
+ -exec ln -sfv {} "${lakehouse_iceberg_lib_dir}" \; \
+ -exec ln -sfv {} "${iceberg_rest_lib_dir}" \;
fi
JAVA_OPTS+=" -XX:-UseContainerSupport"
export JAVA_OPTS
-./bin/gravitino.sh start
+# Run the server in the foreground so this process (PID 1) is the JVM.
+# This ensures SIGTERM is forwarded correctly for graceful shutdown.
+exec ./bin/gravitino.sh run
diff --git a/dev/docker/gravitino/gravitino-dependency.sh
b/dev/docker/gravitino/gravitino-dependency.sh
index 2994eb3283..c31056862d 100755
--- a/dev/docker/gravitino/gravitino-dependency.sh
+++ b/dev/docker/gravitino/gravitino-dependency.sh
@@ -73,8 +73,14 @@ wget "https://jdbc.postgresql.org/download/${pg_driver}" -O
"${jdbc_driver_dir}/
echo "Finish downloading"
+# Copy the Docker entrypoint and its helper script into the docker/
subdirectory so they
+# are clearly separated from user-facing scripts in bin/.
+mkdir -p "${gravitino_dir}/packages/gravitino/docker"
+cp "${gravitino_dir}/docker-entrypoint.sh"
"${gravitino_dir}/packages/gravitino/docker/"
+cp "${gravitino_dir}/rewrite_gravitino_server_config.py"
"${gravitino_dir}/packages/gravitino/docker/"
+
+# Copy the deprecated stub into bin/ for one-release backward compatibility.
mkdir -p "${gravitino_dir}/packages/gravitino/bin"
-cp "${gravitino_dir}/rewrite_gravitino_server_config.py"
"${gravitino_dir}/packages/gravitino/bin/"
cp "${gravitino_dir}/start-gravitino.sh"
"${gravitino_dir}/packages/gravitino/bin/"
fileset_lib_dir="${gravitino_dir}/packages/gravitino/catalogs/fileset/libs"
@@ -96,10 +102,3 @@ find
${gravitino_home}/bundles/iceberg-aliyun-bundle/build/libs/ -name 'gravitin
download_gcs_connector
-
-# Keeping the container running at all times
-cat <<EOF >> "${gravitino_dir}/packages/gravitino/bin/gravitino.sh"
-
-# Keeping a process running in the background
-tail -f /dev/null
-EOF
diff --git a/dev/docker/gravitino/start-gravitino.sh
b/dev/docker/gravitino/start-gravitino.sh
index 5d43d54576..458499f782 100755
--- a/dev/docker/gravitino/start-gravitino.sh
+++ b/dev/docker/gravitino/start-gravitino.sh
@@ -17,39 +17,13 @@
# specific language governing permissions and limitations
# under the License.
#
+# Deprecated: bin/start-gravitino.sh is kept for backward compatibility only
and will be
+# removed in a future release. The Docker ENTRYPOINT has moved to
docker/docker-entrypoint.sh.
+# If you are overriding the container entrypoint or calling this script
directly, please
+# update your configuration to reference docker/docker-entrypoint.sh instead.
-set -ex
-bin_dir="$(dirname "${BASH_SOURCE-$0}")"
-gravitino_dir="$(cd "${bin_dir}/../">/dev/null; pwd)"
-
-cd ${gravitino_dir}
-
-# Skip config rewrite if SKIP_CONFIG_REWRITE is set (e.g., in Kubernetes)
-if [ "${SKIP_CONFIG_REWRITE}" != "true" ]; then
- python bin/rewrite_gravitino_server_config.py
-fi
-
-# Create soft links for JDBC drivers
-jdbc_driver_dir="${gravitino_dir}/jdbc-drivers"
-
-if [ -d "${jdbc_driver_dir}" ]; then
- mkdir -p "${gravitino_dir}/libs"
- find "${jdbc_driver_dir}" -name "mysql-connector-java-*.jar" -exec ln -sfv
{} "${gravitino_dir}/libs/" \;
- find "${jdbc_driver_dir}" -name "postgresql-*.jar" -exec ln -sfv {}
"${gravitino_dir}/libs/" \;
-fi
+echo "WARNING: bin/start-gravitino.sh is deprecated and will be removed in a
future release." \
+ "Please use docker/docker-entrypoint.sh instead." >&2
-# Create soft links for Iceberg bundle jars
-iceberg_bundle_dir="${gravitino_dir}/iceberg-bundles"
-lakehouse_iceberg_lib_dir="${gravitino_dir}/catalogs/lakehouse-iceberg/libs"
-iceberg_rest_lib_dir="${gravitino_dir}/iceberg-rest-server/libs"
-
-if [ -d "${iceberg_bundle_dir}" ]; then
- mkdir -p "${lakehouse_iceberg_lib_dir}"
- mkdir -p "${iceberg_rest_lib_dir}"
- find "${iceberg_bundle_dir}" -name '*.jar' -exec ln -sfv {}
"${lakehouse_iceberg_lib_dir}" \; -exec ln -sfv {} "${iceberg_rest_lib_dir}" \;
-fi
-
-JAVA_OPTS+=" -XX:-UseContainerSupport"
-export JAVA_OPTS
-
-./bin/gravitino.sh start
+bin_dir="$(dirname "${BASH_SOURCE-$0}")"
+exec "${bin_dir}/../docker/docker-entrypoint.sh" "$@"