NEWS
ioBroker in docker mit MACVLAN
-
Wollte mal fragen, ob jemand die folgende Kombination am laufen hat:
- Iobroker in docker
- ohne Synolgy
- über docker-compose
- als MACVLAN
Aktueller Stand: Iobroker läuft in Docker problemlos, kriege es aber nicht hin auf MACVLAN umzustellen. Hintergrund: Sehe MACVLAN als Lösung meines Problems, dass alexa2 Adapter nicht zum laufen bekomme. Gleiches galt für den Shelly-Adapter. Bei diesem habe ich mir durch Umstellung auf MQTT beholfen.
Mein aktuelles yml-File sieht so aus:
version: '2.1' services: iobroker: restart: always image: buanet/iobroker:latest container_name: iobroker hostname: iobroker ports: - "8081:8081" volumes: - ./my-datas/iobroker/iobrokerdata:/opt/iobroker networks: public: ipv4_address: 192.168.0.101 networks: public: driver: macvlan driver_opts: parent: eno1 ipam: config: - subnet: 192.168.0.0/24 gateway: 192.168.0.1 ip_range: 192.168.0.101/32 aux_addresses: net-address: 192.168.0.101
Der container lässt sich fehlerfrei starten, aber kann ihn dann über den Browser nicht aufrufen:
-
@uwe72 said in ioBroker in docker mit MACVLAN:
parent: eno1
bei mir steht da eth0 oder eth1
(aber daran wird es wohl nicht liegen...?---bei mir ist es eine Syno)
was kommt denn bei
iobroker status
-
habe eno1 da mir ifconfig dies so angezeigt hat:
-
-
iobroker is running on this host. At least one iobroker host is running. Instance "admin.0" is running Instance "discovery.0" is running Instance "info.0" is running SYSTEM/memoryLimitMB: 0 SYSTEM/hostname: iobroker SYSTEM/statisticsInterval: 15000 SYSTEM/checkDiskInterval: 300000 SYSTEM/noChmod: false SYSTEM/instanceStartInterval: 2000 SYSTEM/compact: false SYSTEM/allowShellCommands: false SYSTEM/memLimitWarn: 100 SYSTEM/memLimitError: 50 MULTIHOSTSERVICE/enabled: false MULTIHOSTSERVICE/secure: true NETWORK/IPv4: true NETWORK/IPv6: true OBJECTS/type: file OBJECTS/host: 127.0.0.1 OBJECTS/port: 9001 OBJECTS/user: OBJECTS/pass: OBJECTS/noFileCache: false OBJECTS/connectTimeout: 2000 OBJECTS/writeFileInterval: 5000 OBJECTS/OPTIONS/retryStrategy: _0x322f6f=>{if(!_0xd2747e&&_0x35f3af&&_0xc22fa2){return new Error(_0x 41a1('0xf8'));}if(this[_0x41a1('0xb8')]){return new Error(_0x41a1('0x0'));}if(_0xd2747e&&_0x322f6f>= _0x4ad9a3){return new Error(_0x41a1('0x4'));}if(!_0xd2747e){return 0x12c;}else{return _0x1bb20c;}} OBJECTS/OPTIONS/enableReadyCheck: true OBJECTS/OPTIONS/host: 127.0.0.1 OBJECTS/OPTIONS/port: 9001 OBJECTS/OPTIONS/db: 0 OBJECTS/OPTIONS/family: 0 OBJECTS/OPTIONS/autoResubscribe: false OBJECTS/BACKUP/disabled: false OBJECTS/BACKUP/files: 24 OBJECTS/BACKUP/hours: 48 OBJECTS/BACKUP/period: 120 OBJECTS/BACKUP/path: OBJECTS/maxQueue: 1000 STATES/type: file STATES/host: 127.0.0.1 STATES/port: 9000 STATES/maxQueue: 1000 STATES/user: STATES/pass: STATES/connectTimeout: 2000 STATES/writeFileInterval: 30000 STATES/OPTIONS/retryStrategy: reconnectCount => { if (!ready && initError) { return new Error('No more tries'); } if (this.stop) { return new Error('Client has stopped ... no retries anymore'); } if (ready && reconnectCount >= retry_max_count) { return new Error('Stop trying to reconnect'); } // A function that receives an options object as parameter including the retry attempt, // the total_retry_time indicating how much time passed since the last time connected, // the error why the connection was lost and the number of times_connected in total. // If you return a number from this function, the retry will happen exactly after that // time in milliseconds. If you return a non-number, no further retry will happen and // all offline commands are flushed with errors. Return an error to return that // specific error to all offline commands. if (!ready) { return 300; } return retry_max_delay; /*if (options.error.code === 'ECONNREFUSED') { // End reconnecting on a specific error and flush all commands with a individual err or return new Error('The server refused the connection'); } if (options.total_retry_time > 1000 * 60 * 60) { // End reconnecting after a specific timeout and flush all commands with a individua l error return new Error('Retry time exhausted'); } if (options.times_connected > 10) { // End reconnecting with built in error return undefined; } // reconnect after return Math.max(options.attempt * 100, 3000);*/ } STATES/OPTIONS/enableReadyCheck: true STATES/OPTIONS/host: 127.0.0.1 STATES/OPTIONS/port: 9000 STATES/OPTIONS/db: 0 STATES/OPTIONS/family: 0 STATES/OPTIONS/autoResubscribe: false STATES/BACKUP/disabled: false STATES/BACKUP/files: 24 STATES/BACKUP/hours: 48 STATES/BACKUP/period: 120 STATES/BACKUP/path: LOG/level: info LOG/maxDays: 7 LOG/noStdout: true LOG/TRANSPORT/FILE1/type: file LOG/TRANSPORT/FILE1/enabled: true LOG/TRANSPORT/FILE1/filename: log/iobroker LOG/TRANSPORT/FILE1/fileext: .log LOG/TRANSPORT/SYSLOG1/type: syslog LOG/TRANSPORT/SYSLOG1/enabled: false LOG/TRANSPORT/SYSLOG1/host: localhost LOG/TRANSPORT/SYSLOG1/protocol: udp4 LOG/TRANSPORT/SYSLOG1/localhost: iobroker dataDir: ../../iobroker-data/
-
Irgendwie scheint ja was zu laufen, man kommt nur "von außen" nicht drauf?!
Mich wundert es, dass auch keine ports mehr angezeigt werden:
bzw.
root@uwe72-NUC10i7FNH:/home/uwe72/clement/docker# docker inspect iobroker [ { "Id": "28aa848f5520125bf69226a56f95e5a55d1d30a9deb046f01eed755f14eeaa0a", "Created": "2021-01-14T14:13:56.264950209Z", "Path": "/bin/bash", "Args": [ "-c", "/opt/scripts/iobroker_startup.sh" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 3016, "ExitCode": 0, "Error": "", "StartedAt": "2021-01-14T14:13:56.562720661Z", "FinishedAt": "0001-01-01T00:00:00Z", "Health": { "Status": "healthy", "FailingStreak": 0, "Log": [ { "Start": "2021-01-14T15:28:01.827635797+01:00", "End": "2021-01-14T15:28:01.926092821+01:00", "ExitCode": 0, "Output": "Health status: OK - Main process (js-controller) is running.\n" }, { "Start": "2021-01-14T15:28:16.939548327+01:00", "End": "2021-01-14T15:28:17.034572305+01:00", "ExitCode": 0, "Output": "Health status: OK - Main process (js-controller) is running.\n" }, { "Start": "2021-01-14T15:28:32.043811736+01:00", "End": "2021-01-14T15:28:32.14202458+01:00", "ExitCode": 0, "Output": "Health status: OK - Main process (js-controller) is running.\n" }, { "Start": "2021-01-14T15:28:47.155167845+01:00", "End": "2021-01-14T15:28:47.234125745+01:00", "ExitCode": 0, "Output": "Health status: OK - Main process (js-controller) is running.\n" }, { "Start": "2021-01-14T15:29:02.247251796+01:00", "End": "2021-01-14T15:29:02.332040699+01:00", "ExitCode": 0, "Output": "Health status: OK - Main process (js-controller) is running.\n" } ] } }, "Image": "sha256:49e6b39f5ab0f37bf8669361b944782054bab1422f4c9617e66c7f6a2536d96f", "ResolvConfPath": "/var/lib/docker/containers/28aa848f5520125bf69226a56f95e5a55d1d30a9deb046f01eed755f14eeaa0a/resolv.conf", "HostnamePath": "/var/lib/docker/containers/28aa848f5520125bf69226a56f95e5a55d1d30a9deb046f01eed755f14eeaa0a/hostname", "HostsPath": "/var/lib/docker/containers/28aa848f5520125bf69226a56f95e5a55d1d30a9deb046f01eed755f14eeaa0a/hosts", "LogPath": "/var/lib/docker/containers/28aa848f5520125bf69226a56f95e5a55d1d30a9deb046f01eed755f14eeaa0a/28aa848f5520125bf69226a56f95e5a55d1d30a9deb046f01eed755f14eeaa0a-json.log", "Name": "/iobroker", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": [ "/home/uwe72/clement/docker/my-datas/iobroker/iobrokerdata:/opt/iobroker:rw" ], "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "docker_public", "PortBindings": { "8081/tcp": [ { "HostIp": "", "HostPort": "8081" } ] }, "RestartPolicy": { "Name": "always", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": [], "CapAdd": null, "CapDrop": null, "CgroupnsMode": "host", "Dns": null, "DnsOptions": null, "DnsSearch": null, "ExtraHosts": null, "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": null, "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": null, "DeviceCgroupRules": null, "DeviceRequests": null, "KernelMemory": 0, "KernelMemoryTCP": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": null, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware" ], "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/2d1b486494e6ecfe328ffb93aa51d6906843227b7e559bf15f6320ba693725dd-init/diff:/var/lib/docker/overlay2/27ad34f2f5b239e4e1bc690099080d09fdec2d48919ce626661c4c1f54e4403f/diff:/var/lib/docker/overlay2/95fd304d81c6fdb660a7858f97008f846670ae34969bfa30e6ac8e6251e23f45/diff:/var/lib/docker/overlay2/b76cc1760266b53f728b96489d8086abba62adad6d7ab7d07f89dbd1ea4aedac/diff:/var/lib/docker/overlay2/fe6e6144830b2427220e35f70e820c8bd3d9cb8baa1844ab1275f320c9387f42/diff:/var/lib/docker/overlay2/0e036ed620dd9f1e3d50d2ec8f45f3a1d4d1cb212e1f3a318c86f18abe7cee9c/diff:/var/lib/docker/overlay2/ed4b33266171aa7d8a36afbdc7848511b6edfed568a74ae524e2cbe8dcb3dc69/diff:/var/lib/docker/overlay2/8cbcfab1a83e82a496fd41cd245b67960b0485e165d8064b90b24d3d6c0cb367/diff:/var/lib/docker/overlay2/b5972f40a74278852fd90c0d4cb031609c338007f96d349768f8f5597ec4948c/diff:/var/lib/docker/overlay2/b6b90ea065cb37914cf4713c3ef1bd02d8a468568261628da4fdbe453c96e165/diff:/var/lib/docker/overlay2/e26d9fa1313b40bb487152e54f3b26470d27b3ec125f81f130637e116a61a47e/diff:/var/lib/docker/overlay2/14a01e1dfa4af5b2ec028efa6e7b5734630c26af0f80a3b284c8b8ccf66e5b45/diff:/var/lib/docker/overlay2/fc6f07be67978b41cbdf2a27dff7b1fc71f06c8c80d8c5ebfd3ef70a3989649e/diff:/var/lib/docker/overlay2/75a647be05a28d62897976e6ff7ecd3b5d975a9871d9e22eefe2ae05c38cb230/diff:/var/lib/docker/overlay2/c6839c2cd8bfe4c3bb1966338b6a9a4418c6320addd6cebf36977f3a7ca7760b/diff:/var/lib/docker/overlay2/cbc559a1b9da7f79af5e033ee84e21df1429cab4d0abd3a84922679a0eabd963/diff:/var/lib/docker/overlay2/321309404dbbfc90d843e65d1c779d3a14a110be86aba01800e959d72e85a7cb/diff:/var/lib/docker/overlay2/b9efd3982339853df38e349a142b6247de71bc9acee15bb754591c24cd40a0c2/diff:/var/lib/docker/overlay2/364c89243e8fce89ad818d53238b0fe06452cc158af10dbf4ebf9fc8996221e7/diff", "MergedDir": "/var/lib/docker/overlay2/2d1b486494e6ecfe328ffb93aa51d6906843227b7e559bf15f6320ba693725dd/merged", "UpperDir": "/var/lib/docker/overlay2/2d1b486494e6ecfe328ffb93aa51d6906843227b7e559bf15f6320ba693725dd/diff", "WorkDir": "/var/lib/docker/overlay2/2d1b486494e6ecfe328ffb93aa51d6906843227b7e559bf15f6320ba693725dd/work" }, "Name": "overlay2" }, "Mounts": [ { "Type": "bind", "Source": "/home/uwe72/clement/docker/my-datas/iobroker/iobrokerdata", "Destination": "/opt/iobroker", "Mode": "rw", "RW": true, "Propagation": "rprivate" } ], "Config": { "Hostname": "iobroker", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "ExposedPorts": { "8081/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "DEBIAN_FRONTEND=teletype", "LANG=de_DE.UTF-8", "LANGUAGE=de_DE:de", "LC_ALL=de_DE.UTF-8", "SETGID=1000", "SETUID=1000", "TZ=Europe/Berlin" ], "Cmd": null, "Healthcheck": { "Test": [ "CMD", "/bin/bash", "-c", "/opt/scripts/healthcheck.sh" ], "Interval": 15000000000, "Timeout": 5000000000, "Retries": 5 }, "Image": "buanet/iobroker:latest", "Volumes": { "/opt/iobroker": {} }, "WorkingDir": "/opt/iobroker", "Entrypoint": [ "/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh" ], "OnBuild": null, "Labels": { "com.docker.compose.config-hash": "3c89d15451519c08c8b2d598cb06dee497c4bdf8827c8902de993901b9ea482d", "com.docker.compose.container-number": "1", "com.docker.compose.oneoff": "False", "com.docker.compose.project": "docker", "com.docker.compose.project.config_files": "docker-compose.yml", "com.docker.compose.project.working_dir": "/home/uwe72/clement/docker", "com.docker.compose.service": "iobroker", "com.docker.compose.version": "1.27.4", "maintainer": "Andre Germann", "url": "https://buanet.de" } }, "NetworkSettings": { "Bridge": "", "SandboxID": "6e872d3ded33062b512c556b802bdfb8945956eb89a9875284df4006910c176a", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/6e872d3ded33", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "", "Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "", "IPPrefixLen": 0, "IPv6Gateway": "", "MacAddress": "", "Networks": { "docker_public": { "IPAMConfig": { "IPv4Address": "192.168.0.103" }, "Links": null, "Aliases": [ "28aa848f5520", "iobroker" ], "NetworkID": "40bf1397dd7d2f31fc8e4c0dcdf077233a5f28ab5ecb5729e13641072a4330c1", "EndpointID": "52bb5f67f243a9a92ae53bf0a838660f0baaf0db03597e22b315fd51ee4e94c1", "Gateway": "192.168.0.1", "IPAddress": "192.168.0.103", "IPPrefixLen": 24, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:c0:a8:00:67", "DriverOpts": null } } } } ]
-
@uwe72
Der admin läuft jedenfalls.
Kann ja dann nur was mit dem Netzwerk/Ports zu tun haben.Ist denn die von Dir vergebene IP auch frei ?
-
@dslraser meine IP-Adresse fangen ja alle normalerweise mit 192.168.178.XXX an.
Die vergebene ist 192.168.0.101. Die wird definitiv nicht anderweitig verwendet. vermutlich habe ich da beim Netzwerk auch falsche Sachen eingegeben. Mein Problem ist, ich kenne mich bei Netzwerksachen nicht so aus
ipam: config: - subnet: 192.168.0.0/24 gateway: 192.168.0.1 ip_range: 192.168.0.101/32 aux_addresses: net-address: 192.168.0.101
-
ich auch nicht wirklich, aber die macvlan IP sollte schon zu Deinem Netzwerk passen. Ich habe meinen DHCP Bereich etwas eingegrenzt und dem macvlan eine freie IP aus dem darüber liegenden Bereich gegeben.
-
@uwe72 said in ioBroker in docker mit MACVLAN:
meine IP-Adresse fangen ja alle normalerweise mit 192.168.178.XXX an.
Hier mein DHCP Bereich. Alles über der 199 und unter der 40 ist dann "frei"
macvlan bei mir
Wenn ich mich richtig erinnere ist die /24 genau eine IP
-
@dslraser jetzt hat es geklappt, habe Zugriff auf iobroker über den Browser.
Habe nun als subnet die IP meines NUCs (wo docker läuft) eingegeben.
DANKE!
version: '2.1' services: iobroker: restart: always image: buanet/iobroker:latest container_name: iobroker hostname: iobroker ports: - "8081:8081" volumes: - ./my-datas/iobroker/iobrokerdata:/opt/iobroker networks: public: ipv4_address: 192.168.178.210 networks: public: driver: macvlan driver_opts: parent: eno1 ipam: config: - subnet: 192.168.178.109/24
-
@uwe72 said in ioBroker in docker mit MACVLAN:
@dslraser meine IP-Adresse fangen ja alle normalerweise mit 192.168.178.XXX an.
Die vergebene ist 192.168.0.101. Die wird definitiv nicht anderweitig verwendet. vermutlich habe ich da beim Netzwerk auch falsche Sachen eingegeben. Mein Problem ist, ich kenne mich bei Netzwerksachen nicht so aus
ipam: config: - subnet: 192.168.0.0/24 gateway: 192.168.0.1 ip_range: 192.168.0.101/32 aux_addresses: net-address: 192.168.0.101
dann sollte subnet: 192.168.178.0/24
gateway: 192.168.178.1
ip_range: 192.168.178.101/32
net-address: 192.168.178.101
passen. aux_addresses und net-address brauchst du (glaube ich) nicht, lass es aber drin -
-
version: '2.1' services: iobroker: restart: always image: buanet/iobroker:latest container_name: iobroker hostname: iobroker ports: - "8081:8081" volumes: - ./my-datas/iobroker/iobrokerdata:/opt/iobroker networks: public: ipv4_address: 192.168.178.210 networks: public: driver: macvlan driver_opts: parent: eno1 ipam: config: - subnet: 192.168.178.0/24 gateway: 192.168.178.1 ip_range: 192.168.178.210/32
Das ist nun mein letzter Stand. Wie gesagt ioBroker funktioniert.
Bin nun schon beim nächsten Usecase
Was nun komisch ist, wenn ich wenn ich von NUC aus einen ping auf die IP des iobrokers mache, also oben:ping 192.168.178.210
dann bekomme ich keine Antwort. Bei allen anderen besetzten IP Adressen funktioniert der Ping.
Hat mir hier jemand noch einen Hinweis dazu?
Wie gesagt andere IP, z.B. von einem Shelly funktioniert:
-
@uwe72 scheint wohl nicht so out-of-the-box zu gehen, dass der Host mit einem Container kommuniziert:
https://blog.wyraz.de/allgemein/docker-container-mit-eigener-statischer-lan-ip-ausfuehren/
-
@uwe72 said in ioBroker in docker mit MACVLAN:
@uwe72 scheint wohl nicht so out-of-the-box zu gehen, dass der Host mit einem Container kommuniziert:
https://blog.wyraz.de/allgemein/docker-container-mit-eigener-statischer-lan-ip-ausfuehren/
Aber interessante Infos auf der Seite.
-
@uwe72
Ich habe das "Problem" bisher nicht, da meine Syno (wo bei mir ioBroker läuft) zwei Netzwerkanschlüsse hat. -
@uwe72 said in ioBroker in docker mit MACVLAN:
@uwe72 scheint wohl nicht so out-of-the-box zu gehen, dass der Host mit einem Container kommuniziert:
dabei kann ich dir nicht behilflich sein, da reichen meine Netzwerkkenntnisse nicht aus. Ich nutze eine QNAP, welche macvlan-ähnliche qnet Treiber nutzt, da besteht dieses Problem nicht. Müsste ich mal testen bei Gelegenheit. Ein Problem dabei ist, wenn ich mir die Konfig meiner Netzwerkkarte zerschiesse, dann ist es eine mehr oder weniger aufwändige Prozedur, dies zu resetten, damit ich die NAS überhaupt wieder erreichen kann. Interessant ist es aber allemal
-
@dslraser said in ioBroker in docker mit MACVLAN:
@uwe72
Ich habe das "Problem" bisher nicht, da meine Syno (wo bei mir ioBroker läuft) zwei Netzwerkanschlüsse hat.Interessant, evtl. ist es dann gar nicht der QNET Treiber auf meiner QNAP, sondern auch die Tatsache dass ich auch zwei NIC habe. Sollte aber nicht mehr relevant sein wenn man sie abstöpselt(!?).
Netzwerken ist auch so ein unendlich weites Thema, war letztens auf einer Seite da habe ich seit Langem mal wieder nur Bahnhof verstanden
-