diff --git a/dashboard/src/components/app/Storage.vue b/dashboard/src/components/app/Storage.vue
index a0e91162d..b355b4a4d 100644
--- a/dashboard/src/components/app/Storage.vue
+++ b/dashboard/src/components/app/Storage.vue
@@ -225,7 +225,7 @@ onMounted(async () => {
-
+
diff --git a/dashboard/src/views/AppConfigureView.vue b/dashboard/src/views/AppConfigureView.vue
index b7759b38f..226df35a9 100644
--- a/dashboard/src/views/AppConfigureView.vue
+++ b/dashboard/src/views/AppConfigureView.vue
@@ -151,7 +151,7 @@ function isViewEnabled(view, errorState) {
} else if (view === 'resources') {
return errorState === ISTATES.PENDING_RESIZE || errorState === ISTATES.PENDING_RECREATE_CONTAINER;
} else if (view === 'storage') {
- return errorState === ISTATES.PENDING_DATA_DIR_MIGRATION || errorState === ISTATES.PENDING_RECREATE_CONTAINER;
+ return true; // allow in all states because a volume error can happen at any time
} else if (view === 'services') {
return errorState === ISTATES.PENDING_SERVICES_CHANGE;
} else if (view === 'email') {
diff --git a/src/apps.js b/src/apps.js
index f943ceaec..e410a1af8 100644
--- a/src/apps.js
+++ b/src/apps.js
@@ -1752,8 +1752,8 @@ function checkAppState(app, state) {
// allow task to be called again if that was the errored task
if (app.error.installationState === state) return null;
- // allow uninstall from any state
- if (state !== ISTATE_PENDING_UNINSTALL && state !== ISTATE_PENDING_RESTORE && state !== ISTATE_PENDING_IMPORT) return new BoxError(BoxError.BAD_STATE, 'Not allowed in error state');
+ // allow uninstall, restore, import and recreate (for mount/device/env edits) from any error state
+ if (state !== ISTATE_PENDING_UNINSTALL && state !== ISTATE_PENDING_RESTORE && state !== ISTATE_PENDING_IMPORT && state !== ISTATE_PENDING_RECREATE_CONTAINER) return new BoxError(BoxError.BAD_STATE, 'Not allowed in error state');
}
if (app.runState === RSTATE_STOPPED) {