diff --git a/update-mirror-image.groovy b/update-mirror-image.groovy
index 2f71d2a..96dc027 100644
--- a/update-mirror-image.groovy
+++ b/update-mirror-image.groovy
@@ -24,23 +24,12 @@
 python = new com.mirantis.mk.Python()
 venvPepper = "venvPepper"
 
-@NonCPS
-def Boolean dockerExists() {
-  def engine = salt.getPillar(venvPepper, 'I@aptly:server', "aptly:server:source:engine")
-  def matches = (engine =~ /:docker/)
-  try{
-      def test = matches[position]
-      return false
-  }catch(Exception ex){
-      return true
-  }
-}
-
 timeout(time: 12, unit: 'HOURS') {
     node() {
         try {
             python.setupPepperVirtualenv(venvPepper, SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
-            def dockerExists = dockerExists()
+            def engine = salt.getPillar(venvPepper, 'I@aptly:server', "aptly:server:source:engine")
+            runningOnDocker = engine.get("return")[0].containsValue("docker")
 
             if(UPDATE_APTLY.toBoolean()){
                 stage('Update Aptly mirrors'){
@@ -48,7 +37,7 @@
 
                     if(RECREATE_APTLY_MIRRORS.toBoolean())
                     {
-                        if(dockerExists){
+                        if(runningOnDocker){
                             salt.cmdRun(venvPepper, 'I@aptly:server', "aptly mirror list --raw | grep -E '*' | xargs -n 1 aptly mirror drop -force", true, null, true)
                         }
                         else{
@@ -64,7 +53,7 @@
                         UPDATE_APTLY_MIRRORS = UPDATE_APTLY_MIRRORS.replaceAll("\\s","")
                         def mirrors = UPDATE_APTLY_MIRRORS.tokenize(",")
                         for(mirror in mirrors){
-                            if(dockerExists){
+                            if(runningOnDocker){
                                 salt.runSaltProcessStep(venvPepper, 'I@aptly:server', 'cmd.script', ['salt://aptly/files/aptly_mirror_update.sh', "args=\"${aptlyMirrorArgs} -m ${mirror}\""], null, true)
                             }else{
                                 salt.runSaltProcessStep(venvPepper, 'I@aptly:server', 'cmd.script', ['salt://aptly/files/aptly_mirror_update.sh', "args=\"${aptlyMirrorArgs} -m ${mirror}\"", 'runas=aptly'], null, true)
@@ -74,7 +63,7 @@
                     else{
                         common.infoMsg("Updating all Aptly mirrors.")
 
-                        if(dockerExists){
+                        if(runningOnDocker){
                             salt.runSaltProcessStep(venvPepper, 'I@aptly:server', 'cmd.script', ['salt://aptly/files/aptly_mirror_update.sh', "args=\"${aptlyMirrorArgs}\""], null, true)
                         }
                         else{
@@ -100,7 +89,7 @@
                 if(FORCE_OVERWRITE_APTLY_PUBLISHES.toBoolean()){
                     aptlyPublishArgs += "f"
                 }
-                if(dockerExists){
+                if(runningOnDocker){
                     aptlyPublishArgs += " -u http://10.99.0.1:8080"
                     salt.runSaltProcessStep(venvPepper, 'I@aptly:server', 'cmd.script', ['salt://aptly/files/aptly_publish_update.sh', "args=\"${aptlyPublishArgs}\""], null, true)
                 }
diff --git a/upgrade-mcp-release.groovy b/upgrade-mcp-release.groovy
index 70256b7..fb8b0e6 100644
--- a/upgrade-mcp-release.groovy
+++ b/upgrade-mcp-release.groovy
@@ -15,23 +15,10 @@
 python = new com.mirantis.mk.Python()
 venvPepper = "venvPepper"
 
-@NonCPS
-def Boolean dockerExists() {
-  def engine = salt.getPillar(venvPepper, 'I@aptly:server', "aptly:server:source:engine")
-  def matches = (engine =~ /:docker/)
-  try{
-      def test = matches[position]
-      return false
-  }catch(Exception ex){
-      return true
-  }
-}
-
 timeout(time: 12, unit: 'HOURS') {
     node("python") {
         try {
             python.setupPepperVirtualenv(venvPepper, SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
-            def dockerExists = dockerExists()
 
             stage("Update Reclass"){
                 common.infoMsg("Updating reclass model")
@@ -43,7 +30,18 @@
             if(UPDATE_LOCAL_REPOS.toBoolean()){
                 stage("Update local repos"){
                     common.infoMsg("Updating local repositories")
-                    if(dockerExists){
+
+                    def engine = salt.getPillar(venvPepper, 'I@aptly:server', "aptly:server:source:engine")
+                    runningOnDocker = engine.get("return")[0].containsValue("docker")
+
+                    if (runningOnDocker) {
+                        common.infoMsg("Aptly is running as Docker container")
+                    }
+                    else {
+                        common.infoMsg("Aptly isn't running as Docker container. Going to use aptly user for executing aptly commands")
+                    }
+
+                    if(runningOnDocker){
                         salt.cmdRun(venvPepper, 'I@aptly:server', "aptly mirror list --raw | grep -E '*' | xargs -n 1 aptly mirror drop -force", true, null, true)
                     }
                     else{
@@ -52,7 +50,7 @@
 
                     salt.enforceState(venvPepper, 'I@aptly:server', 'aptly', true)
 
-                    if(dockerExists){
+                    if(runningOnDocker){
                         salt.runSaltProcessStep(venvPepper, 'I@aptly:server', 'cmd.script', ['salt://aptly/files/aptly_mirror_update.sh', "args=-sv"], null, true)
                         salt.runSaltProcessStep(venvPepper, 'I@aptly:server', 'cmd.script', ['salt://aptly/files/aptly_publish_update.sh', "args=-frv -u http://10.99.0.1:8080"], null, true)
                     }
