{ "code_name": "dockerdisc", "unique_prefix": "DOCKERDISC", "plugin_type": "other", "enabled": true, "data_source": "script", "show_ui": true, "localized": [ "display_name", "description", "icon" ], "display_name": [ { "language_code": "en_us", "string": "Docker discovery" } ], "icon": [ { "language_code": "en_us", "string": "" } ], "description": [ { "language_code": "en_us", "string": "Enriches known Docker hosts with their running containers - image, Compose project/service, network, and MAC/IP when available. Never creates devices; connects via a read-only Docker Socket Proxy." } ], "params": [ { "name": "hosts", "type": "setting", "value": "DOCKERDISC_hosts", "base64": true, "timeoutMultiplier": true } ], "database_column_definitions": [ { "column": "index", "css_classes": "col-sm-2", "show": true, "type": "none", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Index" } ] }, { "column": "plugin", "css_classes": "col-sm-2", "show": false, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "N/A" } ] }, { "column": "objectPrimaryId", "css_classes": "col-sm-2", "show": true, "type": "device_mac", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Container host" } ] }, { "column": "objectSecondaryId", "css_classes": "col-sm-2", "show": true, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Container" } ] }, { "column": "dateTimeCreated", "css_classes": "col-sm-2", "show": true, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "First seen" } ] }, { "column": "dateTimeChanged", "css_classes": "col-sm-2", "show": true, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Changed" } ] }, { "column": "watchedValue1", "css_classes": "col-sm-2", "show": true, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Image" } ] }, { "column": "watchedValue2", "css_classes": "col-sm-2", "show": true, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Compose Project / Service" } ] }, { "column": "watchedValue3", "css_classes": "col-sm-2", "show": true, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Network Driver" } ] }, { "column": "watchedValue4", "css_classes": "col-sm-2", "show": true, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Container MAC" } ] }, { "column": "extra", "css_classes": "col-sm-3", "show": true, "type": "label", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "IP" } ] }, { "column": "userData", "css_classes": "col-sm-2", "show": false, "type": "textbox_save", "default_value": "", "options": [], "localized": [ "name" ], "name": [ { "language_code": "en_us", "string": "Comments" } ] }, { "column": "status", "css_classes": "col-sm-1", "show": false, "type": "replace", "default_value": "", "options": [ { "equals": "watched-not-changed", "replacement": "
schedule the scheduling settings from below are applied. If you select once the scan is run only once on start of the application (container) for the time specified in DOCKERDISC_RUN_TIMEOUT setting."
}
]
},
{
"function": "CMD",
"type": {
"dataType": "string",
"elements": [
{
"elementType": "input",
"elementOptions": [
{
"readonly": "true"
}
],
"transformers": []
}
]
},
"default_value": "python3 /app/server/plugins/dockerdisc/script.py",
"options": [],
"localized": [
"name",
"description"
],
"name": [
{
"language_code": "en_us",
"string": "Command"
}
],
"description": [
{
"language_code": "en_us",
"string": "Command to run"
}
]
},
{
"function": "RUN_SCHD",
"type": {
"dataType": "string",
"elements": [
{
"elementType": "span",
"elementOptions": [
{
"cssClasses": "input-group-addon validityCheck"
},
{
"getStringKey": "Gen_ValidIcon"
}
],
"transformers": []
},
{
"elementType": "input",
"elementOptions": [
{
"focusout": "validateRegex(this)"
},
{
"base64Regex": "Xig/OlwqfCg/OlswLTldfFsxLTVdWzAtOV18WzAtOV0rLVswLTldKyg/Oi9bMC05XSspP3xcKi9bMC05XSspKSg/OiwoPzpbMC05XXxbMS01XVswLTldfFswLTldKy1bMC05XSsoPzovWzAtOV0rKT98XCovWzAtOV0rKSkqXHMrKD86XCp8KD86WzAtOV18MVswLTldfDJbMC0zXXxbMC05XSstWzAtOV0rKD86L1swLTldKyk/fFwqL1swLTldKykpKD86LCg/OlswLTldfDFbMC05XXwyWzAtM118WzAtOV0rLVswLTldKyg/Oi9bMC05XSspP3xcKi9bMC05XSspKSpccysoPzpcKnwoPzpbMS05XXxbMTJdWzAtOV18M1swMV18WzAtOV0rLVswLTldKyg/Oi9bMC05XSspP3xcKi9bMC05XSspKSg/OiwoPzpbMS05XXxbMTJdWzAtOV18M1swMV18WzAtOV0rLVswLTldKyg/Oi9bMC05XSspP3xcKi9bMC05XSspKSpccysoPzpcKnwoPzpbMS05XXwxWzAtMl18WzAtOV0rLVswLTldKyg/Oi9bMC05XSspP3xcKi9bMC05XSspKSg/OiwoPzpbMS05XXwxWzAtMl18WzAtOV0rLVswLTldKyg/Oi9bMC05XSspP3xcKi9bMC05XSspKSpccysoPzpcKnwoPzpbMC02XXxbMC02XS1bMC02XSg/Oi9bMC05XSspP3xcKi9bMC05XSspKSg/OiwoPzpbMC02XXxbMC02XS1bMC02XSg/Oi9bMC05XSspP3xcKi9bMC05XSspKSok"
}
],
"transformers": []
}
]
},
"default_value": "*/5 * * * *",
"options": [],
"localized": [
"name",
"description"
],
"name": [
{
"language_code": "en_us",
"string": "Schedule"
}
],
"description": [
{
"language_code": "en_us",
"string": "Only enabled if you select schedule in the DOCKERDISC_RUN setting. Make sure you enter the schedule in the correct cron-like format (e.g. validate at crontab.guru). For example entering 0 4 * * * will run the scan after 4 am in the TIMEZONE you set above. Will be run NEXT time the time passes."
}
]
},
{
"function": "RUN_TIMEOUT",
"type": {
"dataType": "integer",
"elements": [
{
"elementType": "input",
"elementOptions": [
{
"type": "number"
}
],
"transformers": []
}
]
},
"default_value": 60,
"options": [],
"localized": [
"name",
"description"
],
"name": [
{
"language_code": "en_us",
"string": "Run timeout"
}
],
"description": [
{
"language_code": "en_us",
"string": "Maximum time in seconds to wait for the script to finish. If this time is exceeded the script is aborted."
}
]
},
{
"function": "hosts",
"type": {
"dataType": "array",
"elements": [
{
"elementType": "button",
"elementOptions": [
{
"sourceSuffixes": []
},
{
"separator": ""
},
{
"cssClasses": "col-xs-12"
},
{
"onClick": "addViaPopupForm(this)"
},
{
"getStringKey": "Gen_Add"
}
],
"transformers": []
},
{
"elementType": "select",
"elementHasInputValue": 1,
"elementOptions": [
{
"multiple": "true"
},
{
"readonly": "true"
},
{
"editable": "true"
},
{
"popupForm": [
{
"function": "DOCKERDISC_SOCKET_PROXY_URL",
"type": {
"dataType": "string",
"elements": [
{
"elementType": "input",
"elementOptions": [
{
"placeholder": "http://docker-socket-proxy:2375"
},
{
"cssClasses": "col-sm-10"
}
],
"transformers": []
}
]
},
"default_value": "http://docker-socket-proxy:2375",
"options": [],
"localized": [
"name",
"description"
],
"name": [
{
"language_code": "en_us",
"string": "Docker Socket Proxy URL"
}
],
"description": [
{
"language_code": "en_us",
"string": "Base URL for the read-only Docker Socket Proxy endpoint for this Docker host (requires the CONTAINERS, INFO, and NETWORKS permissions)."
}
]
},
{
"function": "DOCKERDISC_HOST_MAC",
"type": {
"dataType": "string",
"elements": [
{
"elementType": "input",
"elementOptions": [
{
"placeholder": "aa:bb:cc:dd:ee:ff"
},
{
"cssClasses": "col-sm-10"
}
],
"transformers": []
}
]
},
"default_value": "",
"options": [],
"localized": [
"name",
"description"
],
"name": [
{
"language_code": "en_us",
"string": "Docker Host MAC Address (Manual)"
}
],
"description": [
{
"language_code": "en_us",
"string": "Manually configured physical MAC address of the Docker host. When set, it is used immediately - no Socket Proxy /info call is made. Leave blank to auto-detect the host via hostname matching instead. The host must already exist as a device in NetAlertX (found via ARP/Nmap) - this plugin never creates it."
}
]
}
]
}
],
"transformers": [
"name|base64"
]
},
{
"elementType": "button",
"elementOptions": [
{
"sourceSuffixes": []
},
{
"separator": ""
},
{
"cssClasses": "col-xs-6"
},
{
"onClick": "removeFromList(this)"
},
{
"getStringKey": "Gen_Remove_Last"
}
],
"transformers": []
},
{
"elementType": "button",
"elementOptions": [
{
"sourceSuffixes": []
},
{
"separator": ""
},
{
"cssClasses": "col-xs-6"
},
{
"onClick": "removeAllOptions(this)"
},
{
"getStringKey": "Gen_Remove_All"
}
],
"transformers": []
}
]
},
"default_value": [],
"options": [],
"localized": [
"name",
"description"
],
"name": [
{
"language_code": "en_us",
"string": "Docker hosts"
}
],
"description": [
{
"language_code": "en_us",
"string": "One entry per Docker host to track. Each entry pairs a read-only Docker Socket Proxy URL with that host's device, matched either by a manually configured MAC (used immediately when set) or by auto-detected hostname. Every container found on a host is listed under that host's own Device Details -> Plugins -> DOCKERDISC tab - the host device must already exist in NetAlertX (via ARP/Nmap); this plugin never creates devices."
}
]
},
{
"function": "WATCH",
"type": {
"dataType": "array",
"elements": [
{
"elementType": "select",
"elementOptions": [
{
"multiple": "true",
"orderable": "true"
}
],
"transformers": []
}
]
},
"default_value": [],
"options": [
"watchedValue1",
"watchedValue2",
"watchedValue3",
"watchedValue4"
],
"localized": [
"name",
"description"
],
"name": [
{
"language_code": "en_us",
"string": "Watched"
}
],
"description": [
{
"language_code": "en_us",
"string": "Send a notification if selected values change. Use CTRL + Click to select/deselect. watchedValue1 is the container imagewatchedValue2 is the Compose project/servicewatchedValue3 is the network driverwatchedValue4 is the container's own MAC, when it has onenew means a new unique (unique combination of PrimaryId and SecondaryId) object was discovered. watched-changed means that selected watchedValueN columns changed."
}
]
}
]
}