diff --git a/src/components/Apps/ComposeConfig.vue b/src/components/Apps/ComposeConfig.vue index 825aa72e..f0979f24 100644 --- a/src/components/Apps/ComposeConfig.vue +++ b/src/components/Apps/ComposeConfig.vue @@ -117,6 +117,7 @@ export default { depends_on: [], ports: [], environment: [], + labels: [], devices: [], command: [], container_name: '', @@ -402,6 +403,40 @@ export default { composeServicesItem.environment = [] } + // Labels + composeServicesItem._internal_labels = [] + if (composeServicesItemInput.labels) { + // Reserved CasaOS internal label namespace keys + const reservedLabels = [ + 'icon', 'name', 'origin', 'custom_id', 'desc', 'host', + 'index', 'web', 'protocol', 'casaos', + 'com.docker.compose.project', 'com.docker.compose.service', + 'io.casaos.v1.app.store.id', 'show_env' + ] + + const labelsArray = Array.isArray(composeServicesItemInput.labels) + ? composeServicesItemInput.labels + : Object.entries(composeServicesItemInput.labels) + + composeServicesItem.labels = labelsArray.map((item) => { + const ii = typeof item === 'object' ? Array.from(item) : item.split('=') + return { + host: ii[1].replace(/"/g, ''), + container: ii[0], + } + }).filter((lbl) => { + // If label matches internal system reserved key, cache it invisibly and hide from UI controls + if (reservedLabels.includes(lbl.container)) { + composeServicesItem._internal_labels.push(lbl) + return false + } + return true + }) + } + else { + composeServicesItem.labels = [] + } + // Ports /* - "3000" @@ -670,6 +705,19 @@ export default { .map((env) => { return `${env.container}=${env.host}` }) + // Concat the user-edited labels with the safely preserved internal daemon labels + const allLabels = service.labels.concat((service._internal_labels || [])) + + outputService.labels = allLabels + .filter((lbl) => { + if (lbl.container || lbl.host) { + return true + } + return false + }) + .map((lbl) => { + return `${lbl.container}=${lbl.host}` + }) } if (this.dockerComposeCommands) { const yaml = YAML.parse(this.dockerComposeCommands) @@ -888,6 +936,7 @@ export default { +