diff --git a/.gitignore b/.gitignore
index 127f652..1628c5f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,5 @@
 .project
 
 .idea/
+
+dist
diff --git a/build b/build
index 9202147..50fc8db 100755
--- a/build
+++ b/build
@@ -16,10 +16,12 @@
 
 usage() {
     me=`basename "$0"`
-    echo >&2 "Usage: $me [--help] [--tag TAG] [--no-cache] [--gerrit-url URL] [--base-image IMAGE] [--platform PLATFORM] [--branch GERRIT_BRANCH] [IMAGE]"
+    echo >&2 "Usage: $me [--help] [--tag TAG] [--no-cache] [--gerrit-url URL] [--base-image IMAGE] [--platform PLATFORM] [--branch GERRIT_BRANCH] [--buildah] [IMAGE]"
     exit 1
 }
 
+BUILD_TOOL="docker"
+
 while test $# -gt 0 ; do
   case "$1" in
   --help)
@@ -67,6 +69,11 @@
     shift
     ;;
 
+  --buildah)
+    BUILD_TOOL="buildah"
+    shift
+    ;;
+
   *)
     break
   esac
@@ -79,25 +86,30 @@
 PLATFORM=${PLATFORM:-linux/amd64}  # Default value if PLATFORM is not set
 GERRIT_BRANCH=${GERRIT_BRANCH:-master} # Default value if GERRIT_BRANCH is not set
 DOCKER_BUILD_OPTS="--platform=$PLATFORM"
+if [[ $BUILD_TOOL = buildah ]]; then
+    DOCKER_BUILD_OPTS="$DOCKER_BUILD_OPTS --isolation=chroot"
+    GERRIT_VER_OPTS="$GERRIT_VER_OPTS --no-docker"
+fi
 test -n "$NO_CACHE" && DOCKER_BUILD_OPTS="$DOCKER_BUILD_OPTS --no-cache"
 
 if test -n "$GERRIT_WAR_URL"; then
     BUILD_ARGS="--build-arg GERRIT_WAR_URL=$GERRIT_WAR_URL"
+    GERRIT_VER_OPTS="$GERRIT_VER_OPTS --gerrit-url $GERRIT_WAR_URL"
 fi
 
 if test -n "$HEALTHCHECK_JAR_URL"; then
     BUILD_ARGS="$BUILD_ARGS --build-arg HEALTHCHECK_JAR_URL=$HEALTHCHECK_JAR_URL"
 fi
 
-export REV="$(./get_version.sh --output K8SGERRIT --platform $PLATFORM)"
+export K8SGERRIT_VER="$(./get_version.sh --output K8SGERRIT)"
 
 docker_build(){
     IMAGE=$1
 
-    docker build \
+    $BUILD_TOOL build \
         $DOCKER_BUILD_OPTS \
-        --build-arg TAG=$REV \
-        --build-arg GERRIT_VER="$(./get_version.sh --output GERRIT --platform $PLATFORM)" \
+        --build-arg TAG=$K8SGERRIT_VER \
+        --build-arg GERRIT_VER="$GERRIT_VER" \
         -t k8sgerrit/$IMAGE:$TAG \
         ./container-images/$IMAGE
 
@@ -110,19 +122,21 @@
 }
 
 docker_build_gerrit_base(){
-    BUILD_ARGS="$BUILD_ARGS --build-arg TAG=$REV --build-arg GERRIT_BRANCH=$GERRIT_BRANCH"
-    docker build \
+    BUILD_ARGS="$BUILD_ARGS --build-arg TAG=$K8SGERRIT_VER --build-arg GERRIT_BRANCH=$GERRIT_BRANCH"
+    $BUILD_TOOL build \
         $DOCKER_BUILD_OPTS \
         $BUILD_ARGS \
-        -t gerrit-base:$REV \
+        -t gerrit-base:$K8SGERRIT_VER \
         ./container-images/gerrit-base
     if test $? -ne 0; then
         echo -e "\n\nFailed to build gerrit-base image."
         exit 1
     fi
 
+    export GERRIT_VER="$(./get_version.sh --output GERRIT --platform $PLATFORM $GERRIT_VER_OPTS)"
+
     if test -z "$TAG"; then
-        export TAG="$(./get_version.sh --platform $PLATFORM)"
+        export TAG="$(./get_version.sh --platform $PLATFORM $GERRIT_VER_OPTS)"
     fi
 }
 
@@ -133,7 +147,7 @@
     BASE_BUILD_ARGS="--build-arg BASE_IMAGE=$BASE_IMAGE"
 fi
 
-docker build $DOCKER_BUILD_OPTS $BASE_BUILD_ARGS -t base:$REV ./container-images/base
+$BUILD_TOOL build $DOCKER_BUILD_OPTS $BASE_BUILD_ARGS -t base:$K8SGERRIT_VER ./container-images/base
 if test $? -ne 0; then
     echo -e "\n\nFailed to build base image."
     exit 1
@@ -150,7 +164,7 @@
             docker_build_gerrit_base
         else
             if test -z "$TAG"; then
-                TAG="$REV-unknown"
+                TAG="$K8SGERRIT_VER-unknown"
             fi
             echo -e "\nNo Image containing Gerrit will be built." \
                     "The Gerrit-version can thus not be determinded." \
diff --git a/get_version.sh b/get_version.sh
index 8647ba8..4920143 100755
--- a/get_version.sh
+++ b/get_version.sh
@@ -14,11 +14,12 @@
 
 usage() {
     me=`basename "$0"`
-    echo >&2 "Usage: $me [--help] [--output (K8SGERRIT | GERRIT | COMBINED)]"
+    echo >&2 "Usage: $me [--help] [--output (K8SGERRIT | GERRIT | COMBINED)] [--platform PLATFORM] [--gerrit-war-url GERRIT_WAR_URL] [--no-docker]"
     exit 1
 }
 
 OUTPUT="COMBINED"
+USE_DOCKER=true
 
 while test $# -gt 0 ; do
   case "$1" in
@@ -38,6 +39,17 @@
     shift
     ;;
 
+  --no-docker)
+    USE_DOCKER=false
+    shift
+    ;;
+
+  --gerrit-url)
+    shift
+    GERRIT_WAR_URL=$1
+    shift
+    ;;
+
   *)
     break
   esac
@@ -47,7 +59,7 @@
     echo "$(git describe --always --dirty --abbrev=10)"
 }
 
-getGerritVersion() {
+getGerritVersionDocker() {
     PLATFORM=${PLATFORM:-linux/amd64}  # Default value if PLATFORM is not set
     GERRIT_VERSION="$(
         docker run \
@@ -64,6 +76,41 @@
     echo "$GERRIT_VERSION"
 }
 
+getGerritVersionNoDocker() {
+    GERRIT_BRANCH=${GERRIT_BRANCH:-main}
+    GERRIT_WAR_URL=${GERRIT_WAR_URL:-https://gerrit-ci.gerritforge.com/job/Gerrit-bazel-${GERRIT_BRANCH}/lastSuccessfulBuild/artifact/gerrit/bazel-bin/release.war}
+
+    # Create temporary directory for WAR file
+    TMP_DIR="./dist"
+	mkdir -p $TMP_DIR
+
+    GERRIT_WAR_FILE="$TMP_DIR/gerrit.war"
+
+    if ! test -f "$GERRIT_WAR_FILE"; then
+        if ! curl -f -k -s -S -o "$GERRIT_WAR_FILE" "$GERRIT_WAR_URL" 2>&1 >&2; then
+            echo "Error: Failed to download Gerrit WAR file from $GERRIT_WAR_URL" >&2
+            exit 1
+        fi
+    fi
+
+    GERRIT_VERSION="$(java -jar "$GERRIT_WAR_FILE" version | cut -d' ' -f3)"
+
+    if [ -z "$GERRIT_VERSION" ]; then
+        echo "Error: Could not extract Gerrit version from WAR file" >&2
+        exit 1
+    fi
+
+    echo "$GERRIT_VERSION"
+}
+
+getGerritVersion() {
+    if [ "$USE_DOCKER" = "true" ]; then
+        getGerritVersionDocker
+    else
+        getGerritVersionNoDocker
+    fi
+}
+
 case $OUTPUT in
     K8SGERRIT)
         echo "$(getK8sVersion)"
diff --git a/operator/pom.xml b/operator/pom.xml
index 5ff797e..e8707ee 100644
--- a/operator/pom.xml
+++ b/operator/pom.xml
@@ -28,6 +28,7 @@
 		<platform.architecture>amd64</platform.architecture>
 		<docker.registry>docker.io</docker.registry>
 		<docker.org>k8sgerrit</docker.org>
+		<skip.docker.build>false</skip.docker.build>
 
 		<test.docker.registry>docker.io</test.docker.registry>
 		<test.docker.org>k8sgerritdev</test.docker.org>
@@ -35,6 +36,50 @@
 
 	<profiles>
 		<profile>
+			<id>tar</id>
+			<properties>
+				<skip.docker.build>true</skip.docker.build>
+			</properties>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>com.google.cloud.tools</groupId>
+						<artifactId>jib-maven-plugin</artifactId>
+						<executions>
+							<execution>
+								<id>build-tar</id>
+								<phase>package</phase>
+								<goals>
+									<goal>buildTar</goal>
+								</goals>
+								<configuration>
+									<container>
+										<mainClass>com.google.gerrit.k8s.operator.Main</mainClass>
+									</container>
+									<containerizingMode>packaged</containerizingMode>
+									<from>
+										<image>gcr.io/distroless/java17-debian12</image>
+										<platforms>
+											<platform>
+												<architecture>${platform.architecture}</architecture>
+												<os>${platform.os}</os>
+											</platform>
+										</platforms>
+									</from>
+									<to>
+										<image>gerrit-operator</image>
+										<tags>
+											<tag>${project.version}</tag>
+										</tags>
+									</to>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+		<profile>
 			<id>publish</id>
 			<build>
 				<plugins>
@@ -314,11 +359,13 @@
 				<artifactId>jib-maven-plugin</artifactId>
 				<executions>
 					<execution>
+						<id>docker-build</id>
 						<phase>package</phase>
 						<goals>
 							<goal>dockerBuild</goal>
 						</goals>
 						<configuration>
+							<skip>${skip.docker.build}</skip>
 							<container>
 								<mainClass>com.google.gerrit.k8s.operator.Main</mainClass>
 							</container>
diff --git a/publish b/publish
index 5205375..4ded786 100755
--- a/publish
+++ b/publish
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -x
 
 # Copyright (C) 2018 The Android Open Source Project
 #
@@ -16,13 +16,14 @@
 
 usage() {
     me=`basename "$0"`
-    echo >&2 "Usage: $me [--help] [--update-latest] [--registry REGISTRY] [--org ORGANIZATION] [--no-push] [--tag TAG] [IMAGE]"
+    echo >&2 "Usage: $me [--help] [--buildah] [--update-latest] [--registry REGISTRY] [--org ORGANIZATION] [--no-push] [--tag TAG] [IMAGE]"
     exit 1
 }
 
 UPDATE_LATEST=false
 ORGANIZATION=k8sgerrit
 PUSH_IMAGES=true
+BUILD_TOOL=docker
 
 while test $# -gt 0 ; do
   case "$1" in
@@ -52,6 +53,10 @@
     TAG=$1
     shift
     ;;
+  --buildah)
+    BUILD_TOOL="buildah"
+    shift
+    ;;
   *)
     break
   esac
@@ -65,20 +70,26 @@
 source container-images/publish_list
 IMAGES=$(get_image_list)
 
+if [[ "$BUILD_TOOL" = "docker" ]]; then
+	IMG_TAG_CMD="docker image tag"
+elif [[ "$BUILD_TOOL" = "buildah" ]]; then
+	IMG_TAG_CMD="buildah tag"
+fi
+
 test -n "$REGISTRY" && [[ "$REGISTRY" != */ ]] && REGISTRY="$REGISTRY/"
 
 publish_image(){
   IMAGE=$1
   if test "$UPDATE_LATEST" = "true" ; then
-    docker image tag k8sgerrit/$IMAGE:$TAG ${REGISTRY}${ORGANIZATION}/$IMAGE:latest
+    $IMG_TAG_CMD k8sgerrit/$IMAGE:$TAG ${REGISTRY}${ORGANIZATION}/$IMAGE:latest
     if test "$PUSH_IMAGES" = "true" ; then
-      docker push "${REGISTRY}${ORGANIZATION}/$IMAGE:latest"
+      $BUILD_TOOL push "${REGISTRY}${ORGANIZATION}/$IMAGE:latest"
     fi
   fi
 
-  docker image tag k8sgerrit/$IMAGE:$TAG ${REGISTRY}${ORGANIZATION}/$IMAGE:$TAG
+  $IMG_TAG_CMD k8sgerrit/$IMAGE:$TAG ${REGISTRY}${ORGANIZATION}/$IMAGE:$TAG
   if test "$PUSH_IMAGES" = "true" ; then
-    docker push "${REGISTRY}${ORGANIZATION}/$IMAGE:$TAG"
+    $BUILD_TOOL push "${REGISTRY}${ORGANIZATION}/$IMAGE:$TAG"
   fi
 }
 
diff --git a/setup.cfg b/setup.cfg
index 7708c62..3fe9480 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -3,6 +3,7 @@
 
 markers =
   docker: Tests that require to run and interact with a docker container
+  dockerinspect: Tests that inspect image layers
   incremental: Test classes containing tests that need to run incrementally
   integration: Integration tests
   slow: Tests that run slower than the average test
diff --git a/tests/conftest.py b/tests/conftest.py
index ec5dd63..495cbdd 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -70,6 +70,21 @@
         help="If set, the docker cache will be used when building container images.",
     )
     parser.addoption(
+        "--tag",
+        action="store",
+        help="Tag of the images to test. If set, the build will be skipped.",
+    )
+    parser.addoption(
+        "--repo",
+        action="store",
+        help="Repository from where to pull the images. Only used when --tag is set.",
+    )
+    parser.addoption(
+        "--docker-host",
+        action="store",
+        help="Docker host to be used by docker client.",
+    )
+    parser.addoption(
         "--skip-slow", action="store_true", help="If set, skip slow tests."
     )
 
@@ -97,7 +112,11 @@
 
 
 @pytest.fixture(scope="session")
-def docker_client():
+def docker_client(request):
+    if request.config.getoption("--docker-host"):
+        return docker.DockerClient(
+            base_url=request.config.getoption("--docker-host"),
+            version="1.41")
     return docker.from_env()
 
 
@@ -117,6 +136,21 @@
 
 
 @pytest.fixture(scope="session")
+def docker_get(request, docker_client, docker_build):
+    def docker_get(image, name):
+        if request.config.getoption("--tag"):
+            if name in ["base", "gerrit-base"]:
+                return
+            return docker_client.images.get(
+                f"{request.config.getoption('--repo')}/{name}:{request.config.getoption('--tag')}",
+            )
+
+        return docker_build(image, name)
+
+    return docker_get
+
+
+@pytest.fixture(scope="session")
 def docker_build(
     request,
     docker_client,
@@ -142,7 +176,7 @@
 
 
 @pytest.fixture(scope="session")
-def docker_network(request, docker_client):
+def docker_network(docker_client):
     network = docker_client.networks.create(
         name="k8sgerrit-test-network", scope="local"
     )
@@ -153,35 +187,35 @@
 
 
 @pytest.fixture(scope="session")
-def base_image(container_images, docker_build):
-    return docker_build(container_images["base"], "base")
+def base_image(container_images, docker_get):
+    return docker_get(container_images["base"], "base")
 
 
 @pytest.fixture(scope="session")
-def gerrit_base_image(container_images, docker_build, base_image):
-    return docker_build(container_images["gerrit-base"], "gerrit-base")
+def gerrit_base_image(container_images, docker_get, base_image):
+    return docker_get(container_images["gerrit-base"], "gerrit-base")
 
 
 @pytest.fixture(scope="session")
-def gitgc_image(container_images, docker_build, base_image):
-    return docker_build(container_images["git-gc"], "git-gc")
+def gitgc_image(container_images, docker_get, base_image):
+    return docker_get(container_images["git-gc"], "git-gc")
 
 
 @pytest.fixture(scope="session")
-def apache_git_http_backend_image(container_images, docker_build, base_image):
-    return docker_build(
+def apache_git_http_backend_image(container_images, docker_get, base_image):
+    return docker_get(
         container_images["apache-git-http-backend"], "apache-git-http-backend"
     )
 
 
 @pytest.fixture(scope="session")
-def gerrit_image(container_images, docker_build, base_image, gerrit_base_image):
-    return docker_build(container_images["gerrit"], "gerrit")
+def gerrit_image(container_images, docker_get, base_image, gerrit_base_image):
+    return docker_get(container_images["gerrit"], "gerrit")
 
 
 @pytest.fixture(scope="session")
-def gerrit_init_image(container_images, docker_build, base_image, gerrit_base_image):
-    return docker_build(container_images["gerrit-init"], "gerrit-init")
+def gerrit_init_image(container_images, docker_get, base_image, gerrit_base_image):
+    return docker_get(container_images["gerrit-init"], "gerrit-init")
 
 
 @pytest.fixture(scope="session")
diff --git a/tests/container-images/apache-git-http-backend/test_container_build_apache_git_http_backend.py b/tests/container-images/apache-git-http-backend/test_container_build_apache_git_http_backend.py
index 8d17602..fc7faca 100644
--- a/tests/container-images/apache-git-http-backend/test_container_build_apache_git_http_backend.py
+++ b/tests/container-images/apache-git-http-backend/test_container_build_apache_git_http_backend.py
@@ -15,6 +15,6 @@
 import pytest
 
 
-@pytest.mark.structure
+@pytest.mark.build
 def test_build_apache_git_http_backend_image(apache_git_http_backend_image):
     assert apache_git_http_backend_image.id is not None
diff --git a/tests/container-images/apache-git-http-backend/test_container_structure_apache_git_http_backend.py b/tests/container-images/apache-git-http-backend/test_container_structure_apache_git_http_backend.py
index baaef0e..78603af 100755
--- a/tests/container-images/apache-git-http-backend/test_container_structure_apache_git_http_backend.py
+++ b/tests/container-images/apache-git-http-backend/test_container_structure_apache_git_http_backend.py
@@ -13,15 +13,6 @@
 # limitations under the License.
 
 import pytest
-import utils
-
-
-# pylint: disable=E1101
-@pytest.mark.structure
-def test_apache_git_http_backend_inherits_from_base(apache_git_http_backend_image):
-    assert utils.check_if_ancestor_image_is_inherited(
-        apache_git_http_backend_image, "base:latest"
-    )
 
 
 @pytest.mark.docker
@@ -55,6 +46,7 @@
 
 
 @pytest.mark.structure
+@pytest.mark.dockerinspect
 def test_apache_git_http_backend_has_entrypoint(apache_git_http_backend_image):
     entrypoint = apache_git_http_backend_image.attrs["Config"]["Entrypoint"]
     assert len(entrypoint) == 2
diff --git a/tests/container-images/base/test_container_build_base.py b/tests/container-images/base/test_container_build_base.py
deleted file mode 100644
index e0a8ff4..0000000
--- a/tests/container-images/base/test_container_build_base.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import pytest
-
-
-@pytest.mark.structure
-def test_build_base(base_image):
-    assert base_image.id is not None
diff --git a/tests/container-images/base/test_container_structure_base.py b/tests/container-images/base/test_container_structure_base.py
index 528d2b4..5cad844 100755
--- a/tests/container-images/base/test_container_structure_base.py
+++ b/tests/container-images/base/test_container_structure_base.py
@@ -15,9 +15,19 @@
 import pytest
 
 
-@pytest.fixture(scope="module")
-def container_run(docker_client, container_endless_run_factory, base_image):
-    container_run = container_endless_run_factory(docker_client, base_image)
+@pytest.fixture(
+    scope="module",
+    params=[
+        "apache_git_http_backend_image",
+        "gerrit_image",
+        "gerrit_init_image",
+        "gitgc_image",
+    ],
+)
+def container_run(request, docker_client, container_endless_run_factory):
+    container_run = container_endless_run_factory(
+        docker_client, request.getfixturevalue(request.param)
+    )
     yield container_run
     container_run.stop(timeout=1)
 
diff --git a/tests/container-images/gerrit-base/test_container_build_gerrit_base.py b/tests/container-images/gerrit-base/test_container_build_gerrit_base.py
deleted file mode 100644
index bd3dd5c..0000000
--- a/tests/container-images/gerrit-base/test_container_build_gerrit_base.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import pytest
-
-
-@pytest.mark.structure
-def test_build_gerrit_base(gerrit_base_image):
-    assert gerrit_base_image.id is not None
diff --git a/tests/container-images/gerrit-base/test_container_structure_gerrit_base.py b/tests/container-images/gerrit-base/test_container_structure_gerrit_base.py
index 6ab63ca..0e9171b 100755
--- a/tests/container-images/gerrit-base/test_container_structure_gerrit_base.py
+++ b/tests/container-images/gerrit-base/test_container_structure_gerrit_base.py
@@ -16,25 +16,19 @@
 
 import pytest
 
-import utils
-
 
 JAVA_VER = 25
 
 
-@pytest.fixture(scope="module")
-def container_run(docker_client, container_endless_run_factory, gerrit_base_image):
-    container_run = container_endless_run_factory(docker_client, gerrit_base_image)
+@pytest.fixture(scope="module", params=["gerrit_image", "gerrit_init_image"])
+def container_run(request, docker_client, container_endless_run_factory):
+    container_run = container_endless_run_factory(
+        docker_client, request.getfixturevalue(request.param)
+    )
     yield container_run
     container_run.stop(timeout=1)
 
 
-# pylint: disable=E1101
-@pytest.mark.structure
-def test_gerrit_base_inherits_from_base(gerrit_base_image):
-    assert utils.check_if_ancestor_image_is_inherited(gerrit_base_image, "base:latest")
-
-
 @pytest.mark.docker
 @pytest.mark.structure
 def test_gerrit_base_contains_java(container_run):
@@ -92,9 +86,3 @@
 def test_gerrit_base_war_dir_permissions(container_run):
     exit_code, _ = container_run.exec_run("test -O /var/war")
     assert exit_code == 0
-
-
-@pytest.mark.structure
-def test_gerrit_base_has_entrypoint(gerrit_base_image):
-    entrypoint = gerrit_base_image.attrs["Config"]["Entrypoint"]
-    assert "/var/tools/start" in entrypoint
diff --git a/tests/container-images/gerrit-init/test_container_build_gerrit_init.py b/tests/container-images/gerrit-init/test_container_build_gerrit_init.py
index 0fe3532..1ab4460 100644
--- a/tests/container-images/gerrit-init/test_container_build_gerrit_init.py
+++ b/tests/container-images/gerrit-init/test_container_build_gerrit_init.py
@@ -15,6 +15,6 @@
 import pytest
 
 
-@pytest.mark.structure
+@pytest.mark.build
 def test_build_gerrit_init(gerrit_init_image):
     assert gerrit_init_image.id is not None
diff --git a/tests/container-images/gerrit-init/test_container_structure_gerrit_init.py b/tests/container-images/gerrit-init/test_container_structure_gerrit_init.py
index 21230e9..1ee56aa 100755
--- a/tests/container-images/gerrit-init/test_container_structure_gerrit_init.py
+++ b/tests/container-images/gerrit-init/test_container_structure_gerrit_init.py
@@ -45,14 +45,6 @@
     return request.param
 
 
-# pylint: disable=E1101
-@pytest.mark.structure
-def test_gerrit_init_inherits_from_gerrit_base(gerrit_init_image):
-    assert utils.check_if_ancestor_image_is_inherited(
-        gerrit_init_image, "gerrit-base:latest"
-    )
-
-
 @pytest.mark.docker
 @pytest.mark.structure
 def test_gerrit_init_contains_expected_scripts(container_run, expected_script):
@@ -68,6 +60,7 @@
 
 
 @pytest.mark.structure
+@pytest.mark.dockerinspect
 def test_gerrit_init_has_entrypoint(gerrit_init_image):
     entrypoint = gerrit_init_image.attrs["Config"]["Entrypoint"]
     assert len(entrypoint) >= 1
diff --git a/tests/container-images/gerrit/test_container_build_gerrit.py b/tests/container-images/gerrit/test_container_build_gerrit.py
index fb94e92..f885c7c 100644
--- a/tests/container-images/gerrit/test_container_build_gerrit.py
+++ b/tests/container-images/gerrit/test_container_build_gerrit.py
@@ -15,6 +15,6 @@
 import pytest
 
 
-@pytest.mark.structure
+@pytest.mark.build
 def test_build_gerrit(gerrit_image):
     assert gerrit_image.id is not None
diff --git a/tests/container-images/gerrit/test_container_structure_gerrit.py b/tests/container-images/gerrit/test_container_structure_gerrit.py
index 7ece25e..55f8bf6 100755
--- a/tests/container-images/gerrit/test_container_structure_gerrit.py
+++ b/tests/container-images/gerrit/test_container_structure_gerrit.py
@@ -24,16 +24,15 @@
     container_run.stop(timeout=1)
 
 
-# pylint: disable=E1101
-@pytest.mark.structure
-def test_gerrit_inherits_from_gerrit_base(gerrit_image):
-    assert utils.check_if_ancestor_image_is_inherited(
-        gerrit_image, "gerrit-base:latest"
-    )
-
-
 @pytest.mark.docker
 @pytest.mark.structure
 def test_gerrit_contains_start_script(container_run):
     exit_code, _ = container_run.exec_run("test -f /var/tools/start")
     assert exit_code == 0
+
+
+@pytest.mark.structure
+@pytest.mark.dockerinspect
+def test_gerrit_base_has_entrypoint(gerrit_image):
+    entrypoint = gerrit_image.attrs["Config"]["Entrypoint"]
+    assert "/var/tools/start" in entrypoint
diff --git a/tests/container-images/git-gc/test_container_build_gitgc.py b/tests/container-images/git-gc/test_container_build_gitgc.py
index f94078c..3dfe708 100644
--- a/tests/container-images/git-gc/test_container_build_gitgc.py
+++ b/tests/container-images/git-gc/test_container_build_gitgc.py
@@ -15,6 +15,6 @@
 import pytest
 
 
-@pytest.mark.structure
+@pytest.mark.build
 def test_build_gitgc(gitgc_image):
     assert gitgc_image.id is not None
diff --git a/tests/container-images/git-gc/test_container_structure_gitgc.py b/tests/container-images/git-gc/test_container_structure_gitgc.py
index 65a3be0..c87ee8a 100644
--- a/tests/container-images/git-gc/test_container_structure_gitgc.py
+++ b/tests/container-images/git-gc/test_container_structure_gitgc.py
@@ -24,12 +24,6 @@
     container_run.stop(timeout=1)
 
 
-# pylint: disable=E1101
-@pytest.mark.structure
-def test_gitgc_inherits_from_base(gitgc_image):
-    assert utils.check_if_ancestor_image_is_inherited(gitgc_image, "base:latest")
-
-
 @pytest.mark.docker
 @pytest.mark.structure
 def test_gitgc_contains_gc_script(container_run):
@@ -38,6 +32,7 @@
 
 
 @pytest.mark.structure
+@pytest.mark.dockerinspect
 def test_gitgc_has_entrypoint(gitgc_image):
     entrypoint = gitgc_image.attrs["Config"]["Entrypoint"]
     assert len(entrypoint) == 1
