diff --git a/.github/workflows/files-changed.yml b/.github/workflows/files-changed.yml
index e209be8e8d9..398fb6eae39 100644
--- a/.github/workflows/files-changed.yml
+++ b/.github/workflows/files-changed.yml
@@ -4,24 +4,20 @@ on:
   workflow_call:
     outputs:
       backend:
-        description: "whether backend files changed"
         value: ${{ jobs.detect.outputs.backend }}
       frontend:
-        description: "whether frontend files changed"
         value: ${{ jobs.detect.outputs.frontend }}
       docs:
-        description: "whether docs files changed"
         value: ${{ jobs.detect.outputs.docs }}
       actions:
-        description: "whether actions files changed"
         value: ${{ jobs.detect.outputs.actions }}
       templates:
-        description: "whether templates files changed"
         value: ${{ jobs.detect.outputs.templates }}
+      docker:
+        value: ${{ jobs.detect.outputs.docker }}
 
 jobs:
   detect:
-    name: detect which files changed
     runs-on: ubuntu-latest
     timeout-minutes: 3
     # Map a step output to a job output
@@ -31,6 +27,7 @@ jobs:
       docs: ${{ steps.changes.outputs.docs }}
       actions: ${{ steps.changes.outputs.actions }}
       templates: ${{ steps.changes.outputs.templates }}
+      docker: ${{ steps.changes.outputs.docker }}
     steps:
       - uses: actions/checkout@v3
       - uses: dorny/paths-filter@v2
@@ -59,3 +56,7 @@ jobs:
             templates:
               - "templates/**/*.tmpl"
               - "poetry.lock"
+            docker:
+              - "Dockerfile"
+              - "Dockerfile.rootless"
+              - "docker/**"
diff --git a/.github/workflows/pull-docker-dryrun.yml b/.github/workflows/pull-docker-dryrun.yml
index 916de6b27d3..61f1fd5632e 100644
--- a/.github/workflows/pull-docker-dryrun.yml
+++ b/.github/workflows/pull-docker-dryrun.yml
@@ -11,8 +11,8 @@ jobs:
   files-changed:
     uses: ./.github/workflows/files-changed.yml
 
-  docker-dryrun:
-    if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.frontend == 'true' || needs.files-changed.outputs.actions == 'true'
+  regular:
+    if: needs.files-changed.outputs.docker == 'true' || needs.files-changed.outputs.actions == 'true'
     needs: files-changed
     runs-on: ubuntu-latest
     steps:
@@ -21,3 +21,15 @@ jobs:
         with:
           push: false
           tags: gitea/gitea:linux-amd64
+
+  rootless:
+    if: needs.files-changed.outputs.docker == 'true' || needs.files-changed.outputs.actions == 'true'
+    needs: files-changed
+    runs-on: ubuntu-latest
+    steps:
+      - uses: docker/setup-buildx-action@v2
+      - uses: docker/build-push-action@v4
+        with:
+          push: false
+          file: Dockerfile.rootless
+          tags: gitea/gitea:linux-amd64