Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Off Topic
  4. Status der Docker Container Abfragen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Status der Docker Container Abfragen

Geplant Angeheftet Gesperrt Verschoben Off Topic
11 Beiträge 5 Kommentatoren 629 Aufrufe 7 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • David G.D David G.

    Hallo,

    hat jemand ein Script am laufen um seine Docker Container abzufragen und um deren Status zu sehen?

    Ich nutze Portainer. Da gibt's ja eine Api.
    Nur da reichen meine Skills leider nicht (zumindest so lange Blockly kein http post kann)^^.

    GlasfaserG Offline
    GlasfaserG Offline
    Glasfaser
    schrieb am zuletzt editiert von
    #2

    @david-g sagte in Status der Docker Container Abfragen:

    hat jemand
    um seine Docker Container abzufragen und um deren Status zu sehen?

    Ja ... , siehe hier :

    Anzeige Status Docker Container

    Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

    David G.D 1 Antwort Letzte Antwort
    0
    • GlasfaserG Glasfaser

      @david-g sagte in Status der Docker Container Abfragen:

      hat jemand
      um seine Docker Container abzufragen und um deren Status zu sehen?

      Ja ... , siehe hier :

      Anzeige Status Docker Container

      David G.D Online
      David G.D Online
      David G.
      schrieb am zuletzt editiert von David G.
      #3

      @glasfaser

      Danke, schaue ich mir mal an.

      Nach einer Stunde ChatGPT bin ich so weit gekommen 😅

      docker@docker:~$ docker ps -a --format '{"IMAGE":"{{.Image}}","STATUS":"{{index (split .Status " ") 0}}","LAUFZEIT":"{{if gt (len (split .Status " ")) 2}}{{index (split .Status " ") 1}} {{index (split .Status " ") 2}}{{end}}","STATUS2":"{{if gt (len (split .Status " ")) 3}}{{index (split .Status " ") 3}}{{end}}","CREATED":"{{.CreatedAt}}","NAME":"{{.Names}}"}' | sed '1s/^/[/' | sed '$s/$/]/' | awk '{ printf "%s%s", sep, $0; sep=",\n" }'
      
      [{"IMAGE":"frooodle/s-pdf:latest","STATUS":"Up","LAUFZEIT":"45 hours","STATUS2":"","CREATED":"2024-01-10 03:00:35 +0100 CET","NAME":"Stirling_PDF"},
      {"IMAGE":"jc21/nginx-proxy-manager:latest","STATUS":"Up","LAUFZEIT":"3 days","STATUS2":"","CREATED":"2024-01-08 03:01:12 +0100 CET","NAME":"nginx"},
      {"IMAGE":"linuxserver/heimdall:latest","STATUS":"Up","LAUFZEIT":"About an","STATUS2":"hour","CREATED":"2024-01-06 03:00:41 +0100 CET","NAME":"heimdall"},
      {"IMAGE":"postgres:14-alpine","STATUS":"Up","LAUFZEIT":"5 days","STATUS2":"","CREATED":"2024-01-06 03:00:35 +0100 CET","NAME":"planka_db"},
      {"IMAGE":"jc21/mariadb-aria:latest","STATUS":"Up","LAUFZEIT":"2 weeks","STATUS2":"","CREATED":"2023-12-26 23:05:46 +0100 CET","NAME":"nginx_db"},
      {"IMAGE":"ghcr.io/plankanban/planka:latest","STATUS":"Up","LAUFZEIT":"2 weeks","STATUS2":"","CREATED":"2023-12-21 03:00:44 +0100 CET","NAME":"planka"},
      {"IMAGE":"containrrr/watchtower","STATUS":"Up","LAUFZEIT":"2 weeks","STATUS2":"(healthy)","CREATED":"2023-12-13 20:15:38 +0100 CET","NAME":"WatchTower"},
      {"IMAGE":"portainer/portainer-ce:latest","STATUS":"Up","LAUFZEIT":"2 weeks","STATUS2":"","CREATED":"2023-12-13 20:01:09 +0100 CET","NAME":"portainer"}]
      

      Zeigt eure Lovelace-Visualisierung klick
      (Auch ideal um sich Anregungen zu holen)

      Meine Tabellen für eure Visualisierung klick

      1 Antwort Letzte Antwort
      0
      • David G.D David G.

        Hallo,

        hat jemand ein Script am laufen um seine Docker Container abzufragen und um deren Status zu sehen?

        Ich nutze Portainer. Da gibt's ja eine Api.
        Nur da reichen meine Skills leider nicht (zumindest so lange Blockly kein http post kann)^^.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #4

        @david-g

        um die frage nach der API noch zu vervollständigen hier ein javascript um den containerstatus abzufragen

        const axios = require('axios').default;
        
        
        (async ()=>{
            let domain="http://192.168.1.61:9100";
            let environment="1";
            let containerid="0726906071e2470ac11c7fc031759e59a43163c75a6932adb36be93977cdfd81";
            let token="ptr_rNn6d/Z/JcOCLA7UV0jNRLqEUiDCGHew4Dr5OCtax0g=";
            console.log(await health(domain,environment,containerid,token));
        }
        )();
        
        async function health(domain,environment,containerid,token) {
            let url = `${domain}/api/endpoints/${environment}/docker/containers/${containerid}/json`;
            try {
                let reponse = await axios.get(url,{
                    responseType: 'json',
                    headers: {"X-API-Key":token}
                });
                return reponse.data.State.Health.Status=="healthy";
            } catch (error) {
                console.error(error);
            }
        }
        
        

        für die funktion muss man ein paar parameter vorbereiten

        1. domain = die adresse eures portainers mit protokoll und port
        2. environment = meist nur 1 ihr könnt diesen wert ebenfalls aus der browseradresse des containers ablesen bspws hier ist es der nächste parameter nach #! http://192.168.1.61:9100/#!/1/docker/....., also 1
        3. containerID = diesen wert könnt ihr aus der browseradresse ablesen, wenn ihr in portainer euch den container anschaut
        4. der portainer müsst ihr euch einmalig für euren user generieren
        • oben rechts auf euren usernamen klicken
        • my account auswählen
        • im abschnitt Access tokens euch einen generieren
        • den wert sofort kopieren und im skript eintragen. ihr könnt den wert nur einmal anschauen

        das Rückgabeobjekt reponse.data in der funktion health enthält natürlich noch eine menge mehr informationen, die ihr so entsprechend auslesen könnt

        die containerid per api über den containernamen ermitteln müsste theoretisch auch funktionieren. mehr dazu in der doku https://docs.portainer.io/api/examples#list-all-containers

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        GlasfaserG 1 Antwort Letzte Antwort
        1
        • OliverIOO OliverIO

          @david-g

          um die frage nach der API noch zu vervollständigen hier ein javascript um den containerstatus abzufragen

          const axios = require('axios').default;
          
          
          (async ()=>{
              let domain="http://192.168.1.61:9100";
              let environment="1";
              let containerid="0726906071e2470ac11c7fc031759e59a43163c75a6932adb36be93977cdfd81";
              let token="ptr_rNn6d/Z/JcOCLA7UV0jNRLqEUiDCGHew4Dr5OCtax0g=";
              console.log(await health(domain,environment,containerid,token));
          }
          )();
          
          async function health(domain,environment,containerid,token) {
              let url = `${domain}/api/endpoints/${environment}/docker/containers/${containerid}/json`;
              try {
                  let reponse = await axios.get(url,{
                      responseType: 'json',
                      headers: {"X-API-Key":token}
                  });
                  return reponse.data.State.Health.Status=="healthy";
              } catch (error) {
                  console.error(error);
              }
          }
          
          

          für die funktion muss man ein paar parameter vorbereiten

          1. domain = die adresse eures portainers mit protokoll und port
          2. environment = meist nur 1 ihr könnt diesen wert ebenfalls aus der browseradresse des containers ablesen bspws hier ist es der nächste parameter nach #! http://192.168.1.61:9100/#!/1/docker/....., also 1
          3. containerID = diesen wert könnt ihr aus der browseradresse ablesen, wenn ihr in portainer euch den container anschaut
          4. der portainer müsst ihr euch einmalig für euren user generieren
          • oben rechts auf euren usernamen klicken
          • my account auswählen
          • im abschnitt Access tokens euch einen generieren
          • den wert sofort kopieren und im skript eintragen. ihr könnt den wert nur einmal anschauen

          das Rückgabeobjekt reponse.data in der funktion health enthält natürlich noch eine menge mehr informationen, die ihr so entsprechend auslesen könnt

          die containerid per api über den containernamen ermitteln müsste theoretisch auch funktionieren. mehr dazu in der doku https://docs.portainer.io/api/examples#list-all-containers

          GlasfaserG Offline
          GlasfaserG Offline
          Glasfaser
          schrieb am zuletzt editiert von Glasfaser
          #5

          @oliverio sagte in Status der Docker Container Abfragen:

          um die frage nach der API noch zu vervollständigen

          Cooler Vorschlag .... kann man viel mit spielen :)

          zu /containers/json ,

          f9a8ebb6-ea81-4102-af87-0ebcee988488-grafik.png
          .hier ist auch die Liste dazu :

          https://docs.docker.com/engine/api/v1.41/#tag/Container/operation/ContainerInspect

          Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

          1 Antwort Letzte Antwort
          1
          • David G.D Online
            David G.D Online
            David G.
            schrieb am zuletzt editiert von David G.
            #6

            Hier mein aktueller Stand.

            Screenshot_20240114_114728_Fully Kiosk Browser.jpg

            Beim Namen kann man sich über den Pfeil das Image anzeigen lassen.

            Beim Status falls vorhanden, noch weitere Infos. Ebenfalls über den Pfeil.

            L. Update, zeigt wann der Container zuletzt aktualisiert worden ist. So bekommt man auch mit, wenn der Dev da die Updates eingestellt hat. (Ich kümmere mich nicht selber nicht um die Updates, das macht bei mir WatchTower).

            EDIT:
            Hab die Tabelle nochmal ziemlich überarbeitet.
            Hab sie jetzt unter dem Link in meiner Signatur bereitgestellt.

            Zeigt eure Lovelace-Visualisierung klick
            (Auch ideal um sich Anregungen zu holen)

            Meine Tabellen für eure Visualisierung klick

            1 Antwort Letzte Antwort
            0
            • T Online
              T Online
              ToK
              schrieb am zuletzt editiert von
              #7

              @oliverio, @glasfaser - Danke, für eure Skripte.
              Bei einem Raspi 5 mit 6 Portainer Container, wobei in einem Container der ioBroker läuft, möchte ich einen Container-Status auslesen.
              Entsprechend eurem Post "OliverIO schrieb am 13. Jan. 2024, 19:16" versuche ich den Staus der Container in einem ioBroker JS Skript auszulesen.
              Die unter den Punkten 1 bis 4 angeführten Anpassungen sind umgesetzt:

              const axios = require('axios').default; 
               
              (async ()=>{
                  let domain="http://192.168.xxx.xxx:9443";  <= link zum Portainer Container
                  let environment="2";
                  let containerid="hier-steht-die-Container-id";
                  let token="hier-steht-der-ptr_token";
                  console.log(await health(domain,environment,containerid,token));
              }
              )();
               
              async function health(domain,environment,containerid,token) {
                  let url = `${domain}/api/endpoints/${environment}/docker/containers/${containerid}/json`;
                  try {
                      let reponse = await axios.get(url,{
                          responseType: 'json',
                          headers: {"X-API-Key":token}
                      });
                      return reponse.data.Config.Hostname;
                  } catch (error) {
                      console.error(error);
                  }
              }
              
              

              Bekomme hiermit folgende Fehlermeldungen:

              AxiosError: Request failed with status code 400
                  at settle (/opt/iobroker/node_modules/axios/lib/core/settle.js:19:12)
                  at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/axios/lib/adapters/http.js:798:11)
                  at IncomingMessage.emit (node:events:531:35)
                  at endReadableNT (node:internal/streams/readable:1698:12)
                  at processTicksAndRejections (node:internal/process/task_queues:90:21)
                  at Axios.request (/opt/iobroker/node_modules/axios/lib/core/Axios.js:45:41)
                  at processTicksAndRejections (node:internal/process/task_queues:105:5)
                  at health (script.js.Portainer_1:17:23)
                  at script.js.Portainer_1:10:17 {
                isAxiosError: true,
                code: 'ERR_BAD_REQUEST',
                config: {
                  transitional: {
                    silentJSONParsing: true,
                    forcedJSONParsing: true,
                    clarifyTimeoutError: false
                  },
                  adapter: [ 'xhr', 'http', 'fetch' ],
                  transformRequest: [ [Function: transformRequest] ],
                  transformResponse: [ [Function: transformResponse] ],
                  timeout: 0,
                  xsrfCookieName: 'XSRF-TOKEN',
                  xsrfHeaderName: 'X-XSRF-TOKEN',
                  maxContentLength: -1,
                  maxBodyLength: -1,
                  env: { FormData: [Function [FormData]], Blob: [class Blob] },
                  validateStatus: [Function: validateStatus],
                  headers: Object [AxiosHeaders] {
                    Accept: 'application/json, text/plain, */*',
                    'Content-Type': undefined,
                    'X-API-Key': '"hier-steht-der-ptr_token"',
                    'User-Agent': 'axios/1.13.4',
                    'Accept-Encoding': 'gzip, compress, deflate, br'
                  },
                  responseType: 'json',
                  method: 'get',
                  url: 'http://192.168.xxx.xxx:9443/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                  allowAbsoluteUrls: true,
                  data: undefined
                },
                request: <ref *1> ClientRequest {
                  _events: [Object: null prototype] {
                    abort: [Function (anonymous)],
                    aborted: [Function (anonymous)],
                    connect: [Function (anonymous)],
                    error: [Function (anonymous)],
                    socket: [Function (anonymous)],
                    timeout: [Function (anonymous)],
                    finish: [Function: requestOnFinish]
                  },
                  _eventsCount: 7,
                  outputData: [],
                  outputSize: 0,
                  writable: true,
                  destroyed: false,
                  _last: true,
                  chunkedEncoding: false,
                  shouldKeepAlive: false,
                  maxRequestsOnConnectionReached: false,
                  _defaultKeepAlive: true,
                  useChunkedEncodingByDefault: false,
                  sendDate: false,
                  _removedConnection: false,
                  _removedContLen: false,
                  _removedTE: false,
                  strictContentLength: false,
                  _contentLength: 0,
                  _hasBody: true,
                  _trailer: '',
                  finished: true,
                  _headerSent: true,
                  _closed: false,
                  _header: 'GET /api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json HTTP/1.1\r\n' +
                    'Accept: application/json, text/plain, */*\r\n' +
                    'X-API-Key: "hier-steht-der-ptr_token"\r\n' +
                    'User-Agent: axios/1.13.4\r\n' +
                    'Accept-Encoding: gzip, compress, deflate, br\r\n' +
                    'Host: 192.168.100.210:9443\r\n' +
                    'sentry-trace: 301ec8a1aacd413baaf80e975c472092-8492738104ae694b\r\n' +
                    'baggage: sentry-environment=production,sentry-release=iobroker.javascript%409.0.18,sentry-public_key=f3b9740caaee4ee69eb68019d71526ff,sentry-trace_id=301ec8a1aacd413baaf80e975c472092\r\n' +
                    'Connection: keep-alive\r\n' +
                    '\r\n',
                  _keepAliveTimeout: 0,
                  _onPendingData: [Function: nop],
                  agent: Agent {
                    _events: [Object: null prototype],
                    _eventsCount: 2,
                    _maxListeners: undefined,
                    options: [Object: null prototype],
                    defaultPort: 80,
                    protocol: 'http:',
                    requests: [Object: null prototype] {},
                    sockets: [Object: null prototype],
                    freeSockets: [Object: null prototype] {},
                    keepAliveMsecs: 1000,
                    keepAlive: true,
                    maxSockets: Infinity,
                    maxFreeSockets: 256,
                    scheduling: 'lifo',
                    maxTotalSockets: Infinity,
                    totalSocketCount: 1,
                    agentKeepAliveTimeoutBuffer: 1000,
                    [Symbol(shapeMode)]: false,
                    [Symbol(kCapture)]: false
                  },
                  socketPath: undefined,
                  method: 'GET',
                  maxHeaderSize: undefined,
                  insecureHTTPParser: undefined,
                  joinDuplicateHeaders: undefined,
                  path: '/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                  _ended: true,
                  res: IncomingMessage {
                    _events: [Object],
                    _readableState: [ReadableState],
                    socket: [Socket],
                    httpVersionMajor: 1,
                    httpVersionMinor: 0,
                    httpVersion: '1.0',
                    complete: true,
                    rawHeaders: [],
                    rawTrailers: [],
                    joinDuplicateHeaders: undefined,
                    aborted: false,
                    upgrade: false,
                    url: '',
                    method: null,
                    statusCode: 400,
                    statusMessage: 'Bad Request',
                    client: [Socket],
                    _consuming: true,
                    _dumped: false,
                    req: [Circular *1],
                    _eventsCount: 4,
                    responseUrl: 'http://192.168.xxx.xxx:9443/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                    redirects: [],
                    [Symbol(shapeMode)]: true,
                    [Symbol(kCapture)]: false,
                    [Symbol(kHeaders)]: {},
                    [Symbol(kHeadersCount)]: 0,
                    [Symbol(kTrailers)]: null,
                    [Symbol(kTrailersCount)]: 0
                  },
                  aborted: false,
                  timeoutCb: [Function: emitRequestTimeout],
                  upgradeOrConnect: false,
                  parser: null,
                  maxHeadersCount: null,
                  reusedSocket: false,
                  host: '192.168.100.210',
                  protocol: 'http:',
                  _redirectable: Writable {
                    _events: [Object],
                    _writableState: [WritableState],
                    _options: [Object],
                    _ended: true,
                    _ending: true,
                    _redirectCount: 0,
                    _redirects: [],
                    _requestBodyLength: 0,
                    _requestBodyBuffers: [],
                    _eventsCount: 3,
                    _onNativeResponse: [Function (anonymous)],
                    _currentRequest: [Circular *1],
                    _currentUrl: 'http://192.168.xxx.xxx:9443/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                    _timeout: null,
                    [Symbol(shapeMode)]: true,
                    [Symbol(kCapture)]: false
                  },
                  [Symbol(shapeMode)]: false,
                  [Symbol(kCapture)]: false,
                  [Symbol(kBytesWritten)]: 0,
                  [Symbol(kNeedDrain)]: false,
                  [Symbol(corked)]: 0,
                  [Symbol(kChunkedBuffer)]: [],
                  [Symbol(kChunkedLength)]: 0,
                  [Symbol(kSocket)]: Socket {
                    connecting: false,
                    _hadError: false,
                    _parent: null,
                    _host: null,
                    _closeAfterHandlingError: false,
                    _events: [Object],
                    _readableState: [ReadableState],
                    _writableState: [WritableState],
                    allowHalfOpen: false,
                    _eventsCount: 8,
                    _sockname: null,
                    _pendingData: null,
                    _pendingEncoding: '',
                    server: null,
                    _server: null,
                    timeout: 0,
                    parser: null,
                    _httpMessage: [Circular *1],
                    write: [Function: writeAfterFIN],
                    [Symbol(async_id_symbol)]: 75883994,
                    [Symbol(kHandle)]: null,
                    [Symbol(lastWriteQueueSize)]: 0,
                    [Symbol(timeout)]: Timeout {
                      _idleTimeout: -1,
                      _idlePrev: null,
                      _idleNext: null,
                      _idleStart: 89245129,
                      _onTimeout: null,
                      _timerArgs: undefined,
                      _repeat: null,
                      _destroyed: true,
                      [Symbol(refed)]: false,
                      [Symbol(kHasPrimitive)]: false,
                      [Symbol(asyncId)]: 75883993,
                      [Symbol(triggerId)]: 75883942,
                      [Symbol(kAsyncContextFrame)]: undefined,
                      [Symbol(kResourceStore)]: undefined
                    },
                    [Symbol(kBuffer)]: null,
                    [Symbol(kBufferCb)]: null,
                    [Symbol(kBufferGen)]: null,
                    [Symbol(shapeMode)]: true,
                    [Symbol(kCapture)]: false,
                    [Symbol(kSetNoDelay)]: true,
                    [Symbol(kSetKeepAlive)]: true,
                    [Symbol(kSetKeepAliveInitialDelay)]: 60,
                    [Symbol(kBytesRead)]: 76,
                    [Symbol(kBytesWritten)]: 598
                  },
                  [Symbol(kOutHeaders)]: [Object: null prototype] {
                    accept: [Array],
                    'x-api-key': [Array],
                    'user-agent': [Array],
                    'accept-encoding': [Array],
                    host: [Array],
                    'sentry-trace': [Array],
                    baggage: [Array]
                  },
                  [Symbol(errored)]: null,
                  [Symbol(kHighWaterMark)]: 65536,
                  [Symbol(kRejectNonStandardBodyWrites)]: false,
                  [Symbol(kUniqueHeaders)]: null
                },
                response: {
                  status: 400,
                  statusText: 'Bad Request',
                  headers: Object [AxiosHeaders] {},
                  config: {
                    transitional: [Object],
                    adapter: [Array],
                    transformRequest: [Array],
                    transformResponse: [Array],
                    timeout: 0,
                    xsrfCookieName: 'XSRF-TOKEN',
                    xsrfHeaderName: 'X-XSRF-TOKEN',
                    maxContentLength: -1,
                    maxBodyLength: -1,
                    env: [Object],
                    validateStatus: [Function: validateStatus],
                    headers: [Object [AxiosHeaders]],
                    responseType: 'json',
                    method: 'get',
                    url: 'http://192.168.xxx.xxx:9443/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                    allowAbsoluteUrls: true,
                    data: undefined
                  },
                  request: <ref *1> ClientRequest {
                    _events: [Object: null prototype],
                    _eventsCount: 7,
                    outputData: [],
                    outputSize: 0,
                    writable: true,
                    destroyed: false,
                    _last: true,
                    chunkedEncoding: false,
                    shouldKeepAlive: false,
                    maxRequestsOnConnectionReached: false,
                    _defaultKeepAlive: true,
                    useChunkedEncodingByDefault: false,
                    sendDate: false,
                    _removedConnection: false,
                    _removedContLen: false,
                    _removedTE: false,
                    strictContentLength: false,
                    _contentLength: 0,
                    _hasBody: true,
                    _trailer: '',
                    finished: true,
                    _headerSent: true,
                    _closed: false,
                    _header: 'GET /api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json HTTP/1.1\r\n' +
                      'Accept: application/json, text/plain, */*\r\n' +
                      'X-API-Key: "hier-steht-der-ptr_token"\r\n' +
                      'User-Agent: axios/1.13.4\r\n' +
                      'Accept-Encoding: gzip, compress, deflate, br\r\n' +
                      'Host: 192.168.100.210:9443\r\n' +
                      'sentry-trace: 301ec8a1aacd413baaf80e975c472092-8492738104ae694b\r\n' +
                      'baggage: sentry-environment=production,sentry-release=iobroker.javascript%409.0.18,sentry-public_key=f3b9740caaee4ee69eb68019d71526ff,sentry-trace_id=301ec8a1aacd413baaf80e975c472092\r\n' +
                      'Connection: keep-alive\r\n' +
                      '\r\n',
                    _keepAliveTimeout: 0,
                    _onPendingData: [Function: nop],
                    agent: [Agent],
                    socketPath: undefined,
                    method: 'GET',
                    maxHeaderSize: undefined,
                    insecureHTTPParser: undefined,
                    joinDuplicateHeaders: undefined,
                    path: '/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                    _ended: true,
                    res: [IncomingMessage],
                    aborted: false,
                    timeoutCb: [Function: emitRequestTimeout],
                    upgradeOrConnect: false,
                    parser: null,
                    maxHeadersCount: null,
                    reusedSocket: false,
                    host: '192.168.xxx.xxx',
                    protocol: 'http:',
                    _redirectable: [Writable],
                    [Symbol(shapeMode)]: false,
                    [Symbol(kCapture)]: false,
                    [Symbol(kBytesWritten)]: 0,
                    [Symbol(kNeedDrain)]: false,
                    [Symbol(corked)]: 0,
                    [Symbol(kChunkedBuffer)]: [],
                    [Symbol(kChunkedLength)]: 0,
                    [Symbol(kSocket)]: [Socket],
                    [Symbol(kOutHeaders)]: [Object: null prototype],
                    [Symbol(errored)]: null,
                    [Symbol(kHighWaterMark)]: 65536,
                    [Symbol(kRejectNonStandardBodyWrites)]: false,
                    [Symbol(kUniqueHeaders)]: null
                  },
                  data: 'Client sent an HTTP request to an HTTPS server.\n'
                },
                status: 400
              }
              

              Was läuft hier falsch ...

              Marc BergM 1 Antwort Letzte Antwort
              0
              • T ToK

                @oliverio, @glasfaser - Danke, für eure Skripte.
                Bei einem Raspi 5 mit 6 Portainer Container, wobei in einem Container der ioBroker läuft, möchte ich einen Container-Status auslesen.
                Entsprechend eurem Post "OliverIO schrieb am 13. Jan. 2024, 19:16" versuche ich den Staus der Container in einem ioBroker JS Skript auszulesen.
                Die unter den Punkten 1 bis 4 angeführten Anpassungen sind umgesetzt:

                const axios = require('axios').default; 
                 
                (async ()=>{
                    let domain="http://192.168.xxx.xxx:9443";  <= link zum Portainer Container
                    let environment="2";
                    let containerid="hier-steht-die-Container-id";
                    let token="hier-steht-der-ptr_token";
                    console.log(await health(domain,environment,containerid,token));
                }
                )();
                 
                async function health(domain,environment,containerid,token) {
                    let url = `${domain}/api/endpoints/${environment}/docker/containers/${containerid}/json`;
                    try {
                        let reponse = await axios.get(url,{
                            responseType: 'json',
                            headers: {"X-API-Key":token}
                        });
                        return reponse.data.Config.Hostname;
                    } catch (error) {
                        console.error(error);
                    }
                }
                
                

                Bekomme hiermit folgende Fehlermeldungen:

                AxiosError: Request failed with status code 400
                    at settle (/opt/iobroker/node_modules/axios/lib/core/settle.js:19:12)
                    at IncomingMessage.handleStreamEnd (/opt/iobroker/node_modules/axios/lib/adapters/http.js:798:11)
                    at IncomingMessage.emit (node:events:531:35)
                    at endReadableNT (node:internal/streams/readable:1698:12)
                    at processTicksAndRejections (node:internal/process/task_queues:90:21)
                    at Axios.request (/opt/iobroker/node_modules/axios/lib/core/Axios.js:45:41)
                    at processTicksAndRejections (node:internal/process/task_queues:105:5)
                    at health (script.js.Portainer_1:17:23)
                    at script.js.Portainer_1:10:17 {
                  isAxiosError: true,
                  code: 'ERR_BAD_REQUEST',
                  config: {
                    transitional: {
                      silentJSONParsing: true,
                      forcedJSONParsing: true,
                      clarifyTimeoutError: false
                    },
                    adapter: [ 'xhr', 'http', 'fetch' ],
                    transformRequest: [ [Function: transformRequest] ],
                    transformResponse: [ [Function: transformResponse] ],
                    timeout: 0,
                    xsrfCookieName: 'XSRF-TOKEN',
                    xsrfHeaderName: 'X-XSRF-TOKEN',
                    maxContentLength: -1,
                    maxBodyLength: -1,
                    env: { FormData: [Function [FormData]], Blob: [class Blob] },
                    validateStatus: [Function: validateStatus],
                    headers: Object [AxiosHeaders] {
                      Accept: 'application/json, text/plain, */*',
                      'Content-Type': undefined,
                      'X-API-Key': '"hier-steht-der-ptr_token"',
                      'User-Agent': 'axios/1.13.4',
                      'Accept-Encoding': 'gzip, compress, deflate, br'
                    },
                    responseType: 'json',
                    method: 'get',
                    url: 'http://192.168.xxx.xxx:9443/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                    allowAbsoluteUrls: true,
                    data: undefined
                  },
                  request: <ref *1> ClientRequest {
                    _events: [Object: null prototype] {
                      abort: [Function (anonymous)],
                      aborted: [Function (anonymous)],
                      connect: [Function (anonymous)],
                      error: [Function (anonymous)],
                      socket: [Function (anonymous)],
                      timeout: [Function (anonymous)],
                      finish: [Function: requestOnFinish]
                    },
                    _eventsCount: 7,
                    outputData: [],
                    outputSize: 0,
                    writable: true,
                    destroyed: false,
                    _last: true,
                    chunkedEncoding: false,
                    shouldKeepAlive: false,
                    maxRequestsOnConnectionReached: false,
                    _defaultKeepAlive: true,
                    useChunkedEncodingByDefault: false,
                    sendDate: false,
                    _removedConnection: false,
                    _removedContLen: false,
                    _removedTE: false,
                    strictContentLength: false,
                    _contentLength: 0,
                    _hasBody: true,
                    _trailer: '',
                    finished: true,
                    _headerSent: true,
                    _closed: false,
                    _header: 'GET /api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json HTTP/1.1\r\n' +
                      'Accept: application/json, text/plain, */*\r\n' +
                      'X-API-Key: "hier-steht-der-ptr_token"\r\n' +
                      'User-Agent: axios/1.13.4\r\n' +
                      'Accept-Encoding: gzip, compress, deflate, br\r\n' +
                      'Host: 192.168.100.210:9443\r\n' +
                      'sentry-trace: 301ec8a1aacd413baaf80e975c472092-8492738104ae694b\r\n' +
                      'baggage: sentry-environment=production,sentry-release=iobroker.javascript%409.0.18,sentry-public_key=f3b9740caaee4ee69eb68019d71526ff,sentry-trace_id=301ec8a1aacd413baaf80e975c472092\r\n' +
                      'Connection: keep-alive\r\n' +
                      '\r\n',
                    _keepAliveTimeout: 0,
                    _onPendingData: [Function: nop],
                    agent: Agent {
                      _events: [Object: null prototype],
                      _eventsCount: 2,
                      _maxListeners: undefined,
                      options: [Object: null prototype],
                      defaultPort: 80,
                      protocol: 'http:',
                      requests: [Object: null prototype] {},
                      sockets: [Object: null prototype],
                      freeSockets: [Object: null prototype] {},
                      keepAliveMsecs: 1000,
                      keepAlive: true,
                      maxSockets: Infinity,
                      maxFreeSockets: 256,
                      scheduling: 'lifo',
                      maxTotalSockets: Infinity,
                      totalSocketCount: 1,
                      agentKeepAliveTimeoutBuffer: 1000,
                      [Symbol(shapeMode)]: false,
                      [Symbol(kCapture)]: false
                    },
                    socketPath: undefined,
                    method: 'GET',
                    maxHeaderSize: undefined,
                    insecureHTTPParser: undefined,
                    joinDuplicateHeaders: undefined,
                    path: '/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                    _ended: true,
                    res: IncomingMessage {
                      _events: [Object],
                      _readableState: [ReadableState],
                      socket: [Socket],
                      httpVersionMajor: 1,
                      httpVersionMinor: 0,
                      httpVersion: '1.0',
                      complete: true,
                      rawHeaders: [],
                      rawTrailers: [],
                      joinDuplicateHeaders: undefined,
                      aborted: false,
                      upgrade: false,
                      url: '',
                      method: null,
                      statusCode: 400,
                      statusMessage: 'Bad Request',
                      client: [Socket],
                      _consuming: true,
                      _dumped: false,
                      req: [Circular *1],
                      _eventsCount: 4,
                      responseUrl: 'http://192.168.xxx.xxx:9443/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                      redirects: [],
                      [Symbol(shapeMode)]: true,
                      [Symbol(kCapture)]: false,
                      [Symbol(kHeaders)]: {},
                      [Symbol(kHeadersCount)]: 0,
                      [Symbol(kTrailers)]: null,
                      [Symbol(kTrailersCount)]: 0
                    },
                    aborted: false,
                    timeoutCb: [Function: emitRequestTimeout],
                    upgradeOrConnect: false,
                    parser: null,
                    maxHeadersCount: null,
                    reusedSocket: false,
                    host: '192.168.100.210',
                    protocol: 'http:',
                    _redirectable: Writable {
                      _events: [Object],
                      _writableState: [WritableState],
                      _options: [Object],
                      _ended: true,
                      _ending: true,
                      _redirectCount: 0,
                      _redirects: [],
                      _requestBodyLength: 0,
                      _requestBodyBuffers: [],
                      _eventsCount: 3,
                      _onNativeResponse: [Function (anonymous)],
                      _currentRequest: [Circular *1],
                      _currentUrl: 'http://192.168.xxx.xxx:9443/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                      _timeout: null,
                      [Symbol(shapeMode)]: true,
                      [Symbol(kCapture)]: false
                    },
                    [Symbol(shapeMode)]: false,
                    [Symbol(kCapture)]: false,
                    [Symbol(kBytesWritten)]: 0,
                    [Symbol(kNeedDrain)]: false,
                    [Symbol(corked)]: 0,
                    [Symbol(kChunkedBuffer)]: [],
                    [Symbol(kChunkedLength)]: 0,
                    [Symbol(kSocket)]: Socket {
                      connecting: false,
                      _hadError: false,
                      _parent: null,
                      _host: null,
                      _closeAfterHandlingError: false,
                      _events: [Object],
                      _readableState: [ReadableState],
                      _writableState: [WritableState],
                      allowHalfOpen: false,
                      _eventsCount: 8,
                      _sockname: null,
                      _pendingData: null,
                      _pendingEncoding: '',
                      server: null,
                      _server: null,
                      timeout: 0,
                      parser: null,
                      _httpMessage: [Circular *1],
                      write: [Function: writeAfterFIN],
                      [Symbol(async_id_symbol)]: 75883994,
                      [Symbol(kHandle)]: null,
                      [Symbol(lastWriteQueueSize)]: 0,
                      [Symbol(timeout)]: Timeout {
                        _idleTimeout: -1,
                        _idlePrev: null,
                        _idleNext: null,
                        _idleStart: 89245129,
                        _onTimeout: null,
                        _timerArgs: undefined,
                        _repeat: null,
                        _destroyed: true,
                        [Symbol(refed)]: false,
                        [Symbol(kHasPrimitive)]: false,
                        [Symbol(asyncId)]: 75883993,
                        [Symbol(triggerId)]: 75883942,
                        [Symbol(kAsyncContextFrame)]: undefined,
                        [Symbol(kResourceStore)]: undefined
                      },
                      [Symbol(kBuffer)]: null,
                      [Symbol(kBufferCb)]: null,
                      [Symbol(kBufferGen)]: null,
                      [Symbol(shapeMode)]: true,
                      [Symbol(kCapture)]: false,
                      [Symbol(kSetNoDelay)]: true,
                      [Symbol(kSetKeepAlive)]: true,
                      [Symbol(kSetKeepAliveInitialDelay)]: 60,
                      [Symbol(kBytesRead)]: 76,
                      [Symbol(kBytesWritten)]: 598
                    },
                    [Symbol(kOutHeaders)]: [Object: null prototype] {
                      accept: [Array],
                      'x-api-key': [Array],
                      'user-agent': [Array],
                      'accept-encoding': [Array],
                      host: [Array],
                      'sentry-trace': [Array],
                      baggage: [Array]
                    },
                    [Symbol(errored)]: null,
                    [Symbol(kHighWaterMark)]: 65536,
                    [Symbol(kRejectNonStandardBodyWrites)]: false,
                    [Symbol(kUniqueHeaders)]: null
                  },
                  response: {
                    status: 400,
                    statusText: 'Bad Request',
                    headers: Object [AxiosHeaders] {},
                    config: {
                      transitional: [Object],
                      adapter: [Array],
                      transformRequest: [Array],
                      transformResponse: [Array],
                      timeout: 0,
                      xsrfCookieName: 'XSRF-TOKEN',
                      xsrfHeaderName: 'X-XSRF-TOKEN',
                      maxContentLength: -1,
                      maxBodyLength: -1,
                      env: [Object],
                      validateStatus: [Function: validateStatus],
                      headers: [Object [AxiosHeaders]],
                      responseType: 'json',
                      method: 'get',
                      url: 'http://192.168.xxx.xxx:9443/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                      allowAbsoluteUrls: true,
                      data: undefined
                    },
                    request: <ref *1> ClientRequest {
                      _events: [Object: null prototype],
                      _eventsCount: 7,
                      outputData: [],
                      outputSize: 0,
                      writable: true,
                      destroyed: false,
                      _last: true,
                      chunkedEncoding: false,
                      shouldKeepAlive: false,
                      maxRequestsOnConnectionReached: false,
                      _defaultKeepAlive: true,
                      useChunkedEncodingByDefault: false,
                      sendDate: false,
                      _removedConnection: false,
                      _removedContLen: false,
                      _removedTE: false,
                      strictContentLength: false,
                      _contentLength: 0,
                      _hasBody: true,
                      _trailer: '',
                      finished: true,
                      _headerSent: true,
                      _closed: false,
                      _header: 'GET /api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json HTTP/1.1\r\n' +
                        'Accept: application/json, text/plain, */*\r\n' +
                        'X-API-Key: "hier-steht-der-ptr_token"\r\n' +
                        'User-Agent: axios/1.13.4\r\n' +
                        'Accept-Encoding: gzip, compress, deflate, br\r\n' +
                        'Host: 192.168.100.210:9443\r\n' +
                        'sentry-trace: 301ec8a1aacd413baaf80e975c472092-8492738104ae694b\r\n' +
                        'baggage: sentry-environment=production,sentry-release=iobroker.javascript%409.0.18,sentry-public_key=f3b9740caaee4ee69eb68019d71526ff,sentry-trace_id=301ec8a1aacd413baaf80e975c472092\r\n' +
                        'Connection: keep-alive\r\n' +
                        '\r\n',
                      _keepAliveTimeout: 0,
                      _onPendingData: [Function: nop],
                      agent: [Agent],
                      socketPath: undefined,
                      method: 'GET',
                      maxHeaderSize: undefined,
                      insecureHTTPParser: undefined,
                      joinDuplicateHeaders: undefined,
                      path: '/api/endpoints/2/docker/containers/"hier-steht-die-containerid"/json',
                      _ended: true,
                      res: [IncomingMessage],
                      aborted: false,
                      timeoutCb: [Function: emitRequestTimeout],
                      upgradeOrConnect: false,
                      parser: null,
                      maxHeadersCount: null,
                      reusedSocket: false,
                      host: '192.168.xxx.xxx',
                      protocol: 'http:',
                      _redirectable: [Writable],
                      [Symbol(shapeMode)]: false,
                      [Symbol(kCapture)]: false,
                      [Symbol(kBytesWritten)]: 0,
                      [Symbol(kNeedDrain)]: false,
                      [Symbol(corked)]: 0,
                      [Symbol(kChunkedBuffer)]: [],
                      [Symbol(kChunkedLength)]: 0,
                      [Symbol(kSocket)]: [Socket],
                      [Symbol(kOutHeaders)]: [Object: null prototype],
                      [Symbol(errored)]: null,
                      [Symbol(kHighWaterMark)]: 65536,
                      [Symbol(kRejectNonStandardBodyWrites)]: false,
                      [Symbol(kUniqueHeaders)]: null
                    },
                    data: 'Client sent an HTTP request to an HTTPS server.\n'
                  },
                  status: 400
                }
                

                Was läuft hier falsch ...

                Marc BergM Offline
                Marc BergM Offline
                Marc Berg
                Most Active
                schrieb am zuletzt editiert von Marc Berg
                #8

                @ToK sagte in Status der Docker Container Abfragen:

                let domain="http://192.168.xxx.xxx:9443

                der Port 9443 ist der SSL verschlüsselte.

                Also entweder

                let domain="https://192.168.xxx.xxx:9443

                oder

                let domain="http://192.168.xxx.xxx:9000 (oder welcher Port auch immer bei dir unverschlüsselt ist)

                NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                1 Antwort Letzte Antwort
                0
                • T Online
                  T Online
                  ToK
                  schrieb am zuletzt editiert von
                  #9

                  @Marc Berg
                  Danke für den Hinweis! Im Portainer Container habe ich nur den HTTPS Port 9443 aktiviert - leider nicht auch den Port 9000.
                  Mit let domain="https://192.168.xxx.xxx:9443"; erhalte ich jetzt die Fehlermeldung => AxiosError: self-signed certificate
                  Dies lässt sich zwar mit einem Häkchen unter der Instanz javascript deaktivieren - aber gibt es hierfür nicht einen besseren bzw. sicheren Weg unter JavaScript - eben für diese Funktion self-signed certificate zulassen?
                  Vorübergehend teste ich mit dem aktivierten Häkchen weiter und der Skript läuft ohne Fehlermeldung durch - aber return liefert mit nur "false" als Ergebnis - wobei der Container definitiv "healthy" ist und somit der Status "true" sein sollte ... ?

                  OliverIOO 1 Antwort Letzte Antwort
                  0
                  • T ToK

                    @Marc Berg
                    Danke für den Hinweis! Im Portainer Container habe ich nur den HTTPS Port 9443 aktiviert - leider nicht auch den Port 9000.
                    Mit let domain="https://192.168.xxx.xxx:9443"; erhalte ich jetzt die Fehlermeldung => AxiosError: self-signed certificate
                    Dies lässt sich zwar mit einem Häkchen unter der Instanz javascript deaktivieren - aber gibt es hierfür nicht einen besseren bzw. sicheren Weg unter JavaScript - eben für diese Funktion self-signed certificate zulassen?
                    Vorübergehend teste ich mit dem aktivierten Häkchen weiter und der Skript läuft ohne Fehlermeldung durch - aber return liefert mit nur "false" als Ergebnis - wobei der Container definitiv "healthy" ist und somit der Status "true" sein sollte ... ?

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von
                    #10

                    @ToK

                    Welche Sicherheit erhoffst du dir denn von HTTPS im LAN?
                    Hast du jemanden mit Router Zugriff, der den ganzen Verkehr mitschneidet und analysiert?
                    Ssl macht meiner Meinung nach nur im Internet Sinn.

                    Aber wenn du es dennoch unnötig kompliziert machen möchtest, gäbe es die folgende Methode:
                    Dem axios Aufruf das Public Zertifikat deines selbst signierten Schlüssels mitgeben

                    Oder

                    die Überprüfung des SSLschlüssels führ den request abschalten.

                    Beides sind ein wenig mehr Zeilen Code

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    1 Antwort Letzte Antwort
                    0
                    • T Online
                      T Online
                      ToK
                      schrieb am zuletzt editiert von
                      #11

                      Korrektur bzw. Ergänzung zum letzten Post von gestern
                      Der oben angeführte javascript läuft in einem Blockly "JS-Funktion mit Ergebnis" und lautet "Status".
                      Das "return reponse.data.State.Health.State=="healthy" sollte als Ergebnis true oder false liefern - bekomme im Debus (Info) aber die Meldung "undefined"
                      Ersuche um eure Unterstützung

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      612

                      Online

                      32.6k

                      Benutzer

                      82.3k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe