[SOLVED] Deploying OH 2.4.0 (2.5.0) to docker swarm

I have started some weeks ago a project to make my home automation setup fault tolerant.

My staring HW setup is:
3 x RPi 3B1 with 16GB flash

The SW stack:
Hypriot as atomic host
3 node docker swarm
3 node keepalived for swarm virtual IP, running as docker container
3 node glusterfs for distributes persistent storage, running as compose container
docker-flow-proxy as reverse proxy running as swarm service
docker-flow-monitor running as swarm service
docker-flow-swarm-listener as swarm service
docker-flow-monitor as swarm service (prometheus wrapup)
haproxy-exporter, cadvisor, node-exporter running as swarm service (prometheus exporters)
influxdb, grafana frontail as swarm services.
openhab as swarm service

I this is going to be a long journey.

Right now I am stuck with getting openhab running as swram service.
When I run openhabe as service I get following log entries:

==> /openhab/userdata/logs/openhab.log <==

2019-01-13 18:42:54.901 [WARN ] [g.eclipse.smarthome.core.net.NetUtil] - Found multiple local interfaces - ignoring 10.0.2.16
2019-01-13 18:42:54.936 [WARN ] [g.eclipse.smarthome.core.net.NetUtil] - Found multiple local interfaces - ignoring 10.0.0.19
2019-01-13 18:43:11.891 [WARN ] [g.eclipse.smarthome.core.net.NetUtil] - Found multiple local interfaces - ignoring 10.0.2.16
2019-01-13 18:43:11.897 [WARN ] [g.eclipse.smarthome.core.net.NetUtil] - Found multiple local interfaces - ignoring 10.0.0.19
2019-01-13 18:43:21.706 [INFO ] [thome.model.lsp.internal.ModelServer] - Started Language Server Protocol (LSP) service on port 5007
2019-01-13 18:43:24.833 [INFO ] [.dashboard.internal.DashboardService] - Started Dashboard at http://172.18.0.6:8080
2019-01-13 18:43:24.846 [INFO ] [.dashboard.internal.DashboardService] - Started Dashboard at https://172.18.0.6:8443
2019-01-13 18:43:26.910 [INFO ] [arthome.ui.paper.internal.PaperUIApp] - Started Paper UI at /paperui
2019-01-13 18:43:27.216 [INFO ] [ui.habmin.internal.servlet.HABminApp] - Started HABmin servlet at /habmin
2019-01-13 18:43:27.413 [INFO ] [panel.internal.HABPanelDashboardTile] - Started HABPanel at /habpanel

as a result in paper ui I get almost on every menu a 503:service not available

openhab is attached to two networks:
monitor 10.0.0.0/24
proxy 10.0.2.0/24

the proxy network is the one the connection to the outer world should happen outbout and inbound through reverse proxy.

is there any possibility to set this network affinity outside of paper ui?

Or are ther any other ideas why this does not work

Editing /var/lib/openhab2/config/org/eclipse/smarthome/network.config and setting subnet and broadcast address eliminated the WARNINGS.
https://community.openhab.org/t/parameter-setting-org-eclipse-smarthome-network/36545

Still having problem s in PaperUI:
Add-ON menue not visible and all Configuration Sub Menue not accessable getting an 503:service not available error message

Maybe you choose “minimal” or “simple” at first startup?

Please stop openHAB2, go to

/etc/openhab2/services/addons.cfg

and search the line starting with package =

Change to package = expert

which should install some stuff when starting openHAB2 again.

No for sure it is the overlay networking and/or the reverse proxy giving me pain.
I started on the same machine openhab with compose and network_mode: “host”.
As a result I had everything as expected, no errors.

I have TRACE log output when clicking on such a sub menue with 503:

2019-01-14 10:39:16.835 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Queued change org.eclipse.jetty.io.ManagedSelector$Accept@140272a on org.eclipse.jetty.io.ManagedSelector@1ceafa4 id=1 keys=1 selected=0 updates=0
2019-01-14 10:39:16.850 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Selector sun.nio.ch.EPollSelectorImpl@14aa2fa woken up from select, 0/0/0 selected
2019-01-14 10:39:16.855 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Selector sun.nio.ch.EPollSelectorImpl@14aa2fa processing 0 keys, 1 updates
2019-01-14 10:39:16.886 [DEBUG] [org.eclipse.jetty.io.IdleTimeout    ] - SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=1/30000}{io=0/0,kio=0,kro=0}-><null> idle timeout check, elapsed: 1 ms, remaining: 29999 ms
2019-01-14 10:39:16.892 [DEBUG] [org.eclipse.jetty.server.HttpChannel] - new HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0} -> SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=6/30000}{io=0/0,kio=0,kro=0}-><null>,null,HttpChannelState@a21898{s=IDLE a=NOT_ASYNC i=true r=IDLE w=false}
2019-01-14 10:39:16.899 [DEBUG] [.eclipse.jetty.server.HttpConnection] - New HTTP Connection HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=14/30000}{io=0/0,kio=0,kro=0}-><null>
2019-01-14 10:39:16.905 [DEBUG] [rg.eclipse.jetty.io.AbstractEndPoint] - onOpen SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=19/30000}{io=0/0,kio=0,kro=0}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:16.912 [DEBUG] [.eclipse.jetty.io.AbstractConnection] - onOpen HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=26/30000}{io=0/0,kio=0,kro=0}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:16.922 [DEBUG] [.eclipse.jetty.io.AbstractConnection] - fillInterested HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=35/30000}{io=0/0,kio=0,kro=0}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:16.929 [DEBUG] [org.eclipse.jetty.io.FillInterest   ] - interested FillInterest@3fb073{AC.ReadCB@10cce48{HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=2/30000}{io=0/0,kio=0,kro=0}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}}}
2019-01-14 10:39:16.936 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - changeInterests p=false 0->1 for SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=9/30000}{io=0/1,kio=0,kro=0}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:16.942 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Queued change org.eclipse.jetty.io.ChannelEndPoint$1@511474 on org.eclipse.jetty.io.ManagedSelector@1ceafa4 id=1 keys=1 selected=0 updates=0
2019-01-14 10:39:16.952 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Created SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=25/30000}{io=0/1,kio=0,kro=0}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:16.952 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Selector sun.nio.ch.EPollSelectorImpl@14aa2fa woken with none selected
2019-01-14 10:39:16.956 [DEBUG] [e.jetty.util.thread.QueuedThreadPool] - ran org.eclipse.jetty.io.ManagedSelector$Accept@140272a
2019-01-14 10:39:16.957 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Selector sun.nio.ch.EPollSelectorImpl@14aa2fa woken up from select, 0/0/1 selected
2019-01-14 10:39:16.965 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - updateable 1
2019-01-14 10:39:16.971 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - update org.eclipse.jetty.io.ChannelEndPoint$1@511474
2019-01-14 10:39:16.974 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - Key interests updated 0 -> 1 on SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=48/30000}{io=1/1,kio=1,kro=0}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:16.987 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - selected 1 sun.nio.ch.SelectionKeyImpl@1eba589 SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=60/30000}{io=1/1,kio=1,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0} 
2019-01-14 10:39:16.990 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - onSelected 1->0 r=true w=false for SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=64/30000}{io=1/0,kio=1,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:16.993 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - task CEP:SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=67/30000}{io=1/0,kio=1,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}:runFillable:BLOCKING
2019-01-14 10:39:16.997 [DEBUG] [y.util.thread.ReservedThreadExecutor] - ReservedThreadExecutor@9d6770{s=1/4,p=0} tryExecute EatWhatYouKill@22a85d/SelectorProducer@719132/PRODUCING/p=false/QueuedThreadPool[qtp30492697]@1d14819{STARTED,2<=16<=50,i=9,q=0}[ReservedThreadExecutor@9d6770{s=1/4,p=0}][pc=0,pic=0,pec=3,epc=34]@2019-01-14T10:39:16.996+01:00
2019-01-14 10:39:17.000 [DEBUG] [y.util.thread.ReservedThreadExecutor] - ReservedThreadExecutor@9d6770{s=0/4,p=0}@131ec21 offer EatWhatYouKill@22a85d/SelectorProducer@719132/PRODUCING/p=false/QueuedThreadPool[qtp30492697]@1d14819{STARTED,2<=16<=50,i=9,q=0}[ReservedThreadExecutor@9d6770{s=0/4,p=0}][pc=0,pic=0,pec=3,epc=34]@2019-01-14T10:39:17+01:00
2019-01-14 10:39:17.005 [DEBUG] [e.jetty.util.thread.QueuedThreadPool] - queue ReservedThreadExecutor@9d6770{s=0/4,p=1}@128f368
2019-01-14 10:39:17.009 [DEBUG] [y.util.thread.ReservedThreadExecutor] - ReservedThreadExecutor@9d6770{s=0/4,p=1}@131ec21 task=EatWhatYouKill@22a85d/SelectorProducer@719132/IDLE/p=true/QueuedThreadPool[qtp30492697]@1d14819{STARTED,2<=16<=50,i=8,q=0}[ReservedThreadExecutor@9d6770{s=0/4,p=1}][pc=0,pic=0,pec=3,epc=34]@2019-01-14T10:39:17.008+01:00
2019-01-14 10:39:17.012 [DEBUG] [.util.thread.strategy.EatWhatYouKill] - EatWhatYouKill@22a85d/SelectorProducer@719132/IDLE/p=true/QueuedThreadPool[qtp30492697]@1d14819{STARTED,2<=16<=50,i=8,q=0}[ReservedThreadExecutor@9d6770{s=0/4,p=1}][pc=0,pic=0,pec=3,epc=34]@2019-01-14T10:39:17.009+01:00 m=EXECUTE_PRODUCE_CONSUME t=CEP:SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=85/30000}{io=1/0,kio=1,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}:runFillable:BLOCKING/BLOCKING
2019-01-14 10:39:17.013 [DEBUG] [.util.thread.strategy.EatWhatYouKill] - EatWhatYouKill@22a85d/SelectorProducer@719132/IDLE/p=true/QueuedThreadPool[qtp30492697]@1d14819{STARTED,2<=16<=50,i=8,q=0}[ReservedThreadExecutor@9d6770{s=0/4,p=1}][pc=0,pic=0,pec=3,epc=34]@2019-01-14T10:39:17.012+01:00 tryProduce true
2019-01-14 10:39:17.017 [DEBUG] [org.eclipse.jetty.io.FillInterest   ] - fillable FillInterest@3fb073{AC.ReadCB@10cce48{HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=FI,flush=-,to=91/30000}{io=1/0,kio=1,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}}}
2019-01-14 10:39:17.022 [DEBUG] [.eclipse.jetty.server.HttpConnection] - HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=96/30000}{io=1/0,kio=1,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0} onFillable enter HttpChannelState@a21898{s=IDLE a=NOT_ASYNC i=true r=IDLE w=false} null
2019-01-14 10:39:17.023 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - Key interests updated 1 -> 0 on SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=97/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.025 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Selector sun.nio.ch.EPollSelectorImpl@14aa2fa waiting with 1 keys
2019-01-14 10:39:17.026 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - filled 449 SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=100/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.030 [DEBUG] [.eclipse.jetty.server.HttpConnection] - HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=1/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0} filled 449 HeapByteBuffer@f2ad85[p=0,l=449,c=8192,r=449]={<<<GET /paperui/part...tion: close\r\n\r\n>>>\n\r\nion: close\r\n\r\n...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00}
2019-01-14 10:39:17.034 [DEBUG] [.eclipse.jetty.server.HttpConnection] - HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=5/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=START,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=0,c=false,a=IDLE,uri=null,age=0} parse HeapByteBuffer@f2ad85[p=0,l=449,c=8192,r=449]={<<<GET /paperui/part...tion: close\r\n\r\n>>>\n\r\nion: close\r\n\r\n...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00} {}
2019-01-14 10:39:17.037 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - parseNext s=START HeapByteBuffer@f2ad85[p=0,l=449,c=8192,r=449]={<<<GET /paperui/part...tion: close\r\n\r\n>>>\n\r\nion: close\r\n\r\n...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00}
2019-01-14 10:39:17.051 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Host --> VALUE
2019-01-14 10:39:17.054 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Host --> IN_VALUE
2019-01-14 10:39:17.056 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Host --> FIELD
2019-01-14 10:39:17.059 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Accept --> VALUE
2019-01-14 10:39:17.085 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:Referer --> FIELD
2019-01-14 10:39:17.095 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - HEADER:If-None-Match --> IN_VALUE
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
If-None-Match: 1544988654000
X-Forwarded-For: 10.255.0.2
2019-01-14 10:39:17.125 [DEBUG] [.eclipse.jetty.server.HttpConnection] - HttpConnection@10cce48[p=HttpParser{s=END,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=//vevedock/paperui/partials/services/configuration.services.html,age=11}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=96/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=END,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=//vevedock/paperui/partials/services/configuration.services.html,age=12} parsed true HttpParser{s=END,0 of -1}
2019-01-14 10:39:17.129 [DEBUG] [.eclipse.jetty.server.HttpConnection] - releaseRequestBuffer HttpConnection@10cce48[p=HttpParser{s=END,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=//vevedock/paperui/partials/services/configuration.services.html,age=15}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=100/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=END,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=//vevedock/paperui/partials/services/configuration.services.html,age=16}
2019-01-14 10:39:17.135 [DEBUG] [clipse.jetty.server.HttpChannelState] - handling HttpChannelState@a21898{s=IDLE a=NOT_ASYNC i=true r=IDLE w=false}
2019-01-14 10:39:17.145 [DEBUG] [ax.web.service.spi.model.ServerModel] - Path [/paperui/partials/services/configuration.services.html] matched to {pattern=/paperui/.*,model=ResourceModel{id=org.ops4j.pax.web.service.spi.model.ResourceModel-36,name=/paperui:web,urlPatterns=[/paperui/*],alias=/paperui,servlet=ResourceServlet{context=/,alias=/paperui,name=web},initParams={},context=ContextModel{id=org.ops4j.pax.web.service.spi.model.ContextModel-35,name=,httpContext=DefaultHttpContext [bundle=org.eclipse.smarthome.ui.paper_0.10.0.oh240 [222], contextID=custom],contextParams={},virtualHosts={},connectors={}}}}
2019-01-14 10:39:17.152 [DEBUG] [org.eclipse.jetty.server.session    ] - sessionHandler=org.eclipse.jetty.server.session.SessionHandler28613219==dftMaxIdleSec=600
2019-01-14 10:39:17.154 [DEBUG] [org.eclipse.jetty.server.session    ] - session=null
2019-01-14 10:39:17.157 [DEBUG] [eclipse.jetty.servlet.ServletHandler] - servlet |/paperui|/partials/services/configuration.services.html -> /paperui:web@5357e26b==org.ops4j.pax.web.service.jetty.internal.ResourceServlet,jsp=null,order=-1,inst=true
2019-01-14 10:39:17.159 [DEBUG] [ce.jetty.internal.HttpServiceContext] - Handling request for [/paperui/partials/services/configuration.services.html] using http context [DefaultHttpContext [bundle=org.eclipse.smarthome.ui.paper_0.10.0.oh240 [222], contextID=custom]]
2019-01-14 10:39:17.162 [DEBUG] [y.internal.HttpServiceServletHandler] - handling request org.ops4j.pax.web.service.jetty.internal.HttpServiceRequestWrapper@1d94546, org.ops4j.pax.web.service.jetty.internal.HttpServiceResponseWrapper@10478d9
2019-01-14 10:39:17.182 [DEBUG] [org.eclipse.jetty.server.HttpChannel] - sendResponse info=null content=HeapByteBuffer@12a5a7d[p=0,l=0,c=0,r=0]={<<<>>>} complete=true committing=true callback=Blocker@881d50{null}
2019-01-14 10:39:17.190 [DEBUG] [org.eclipse.jetty.http.HttpGenerator] - generateHeaders HTTP/1.1{s=304,h=1,cl=-1} last=true content=HeapByteBuffer@12a5a7d[p=0,l=0,c=0,r=0]={<<<>>>}
2019-01-14 10:39:17.202 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - flushed 81 SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=W,to=173/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=END,0 of -1},g=HttpGenerator@1b3222e{s=COMPLETING}]=>HttpChannelOverHttp@190d16a{r=1,c=true,a=COMPLETING,uri=//vevedock/paperui/partials/services/configuration.services.html,age=89}
2019-01-14 10:39:17.205 [DEBUG] [org.eclipse.jetty.io.WriteFlusher   ] - Flushed=true written=81 remaining=0 WriteFlusher@a8c817{WRITING}->null
2019-01-14 10:39:17.214 [DEBUG] [rg.eclipse.jetty.io.AbstractEndPoint] - shutdownOutput SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OPEN,fill=-,flush=-,to=9/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=END,0 of -1},g=HttpGenerator@1b3222e{s=END}]=>HttpChannelOverHttp@190d16a{r=1,c=true,a=COMPLETING,uri=//vevedock/paperui/partials/services/configuration.services.html,age=100}
	at org.eclipse.jetty.io.ChannelEndPoint.fill(ChannelEndPoint.java:234) [75:org.eclipse.jetty.io:9.4.11.v20180605]
	at org.eclipse.jetty.server.HttpConnection.fillRequestBuffer(HttpConnection.java:331) [84:org.eclipse.jetty.server:9.4.11.v20180605]
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:243) [84:org.eclipse.jetty.server:9.4.11.v20180605]
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281) [75:org.eclipse.jetty.io:9.4.11.v20180605]
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102) [75:org.eclipse.jetty.io:9.4.11.v20180605]
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118) [75:org.eclipse.jetty.io:9.4.11.v20180605]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) [87:org.eclipse.jetty.util:9.4.11.v20180605]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310) [87:org.eclipse.jetty.util:9.4.11.v20180605]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) [87:org.eclipse.jetty.util:9.4.11.v20180605]
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) [87:org.eclipse.jetty.util:9.4.11.v20180605]
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) [87:org.eclipse.jetty.util:9.4.11.v20180605]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762) [87:org.eclipse.jetty.util:9.4.11.v20180605]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680) [87:org.eclipse.jetty.util:9.4.11.v20180605]
2019-01-14 10:39:17.236 [DEBUG] [rg.eclipse.jetty.io.AbstractEndPoint] - shutdownInput SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,OSHUT,fill=-,flush=-,to=31/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.240 [DEBUG] [org.eclipse.jetty.io.ChannelEndPoint] - doClose SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=34/30000}{io=0/0,kio=0,kro=1}->HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.250 [DEBUG] [.eclipse.jetty.server.HttpConnection] - HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=45/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0} filled -1 HeapByteBuffer@f2ad85[p=0,l=0,c=8192,r=0]={<<<>>>HTTP/1.1 304 Not ...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00}
2019-01-14 10:39:17.253 [DEBUG] [rg.eclipse.jetty.io.AbstractEndPoint] - close SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=48/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.254 [DEBUG] [org.eclipse.jetty.io.ManagedSelector] - Destroyed SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=49/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.256 [DEBUG] [rg.eclipse.jetty.io.AbstractEndPoint] - close(null) SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=51/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.258 [DEBUG] [.eclipse.jetty.io.AbstractConnection] - onClose HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=53/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.260 [DEBUG] [.eclipse.jetty.server.HttpConnection] - HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=55/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSE,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0} parse HeapByteBuffer@f2ad85[p=0,l=0,c=8192,r=0]={<<<>>>HTTP/1.1 304 Not ...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00} {}
2019-01-14 10:39:17.263 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - parseNext s=CLOSE HeapByteBuffer@f2ad85[p=0,l=0,c=8192,r=0]={<<<>>>HTTP/1.1 304 Not ...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00}
2019-01-14 10:39:17.265 [DEBUG] [org.eclipse.jetty.http.HttpParser   ] - CLOSE --> CLOSED
2019-01-14 10:39:17.269 [DEBUG] [.eclipse.jetty.server.HttpConnection] - HttpConnection@10cce48[p=HttpParser{s=CLOSED,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=64/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSED,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0} parsed false HttpParser{s=CLOSED,0 of -1}
2019-01-14 10:39:17.273 [DEBUG] [.eclipse.jetty.server.HttpConnection] - releaseRequestBuffer HttpConnection@10cce48[p=HttpParser{s=CLOSED,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=68/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSED,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}
2019-01-14 10:39:17.277 [DEBUG] [.eclipse.jetty.server.HttpConnection] - HttpConnection@10cce48[p=HttpParser{s=CLOSED,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0}<-SocketChannelEndPoint@1f4b522{/10.0.2.4:49316<->/10.0.2.25:8080,CLOSED,fill=-,flush=-,to=72/30000}{io=0/0,kio=-1,kro=-1}->HttpConnection@10cce48[p=HttpParser{s=CLOSED,0 of -1},g=HttpGenerator@1b3222e{s=START}]=>HttpChannelOverHttp@190d16a{r=1,c=false,a=IDLE,uri=null,age=0} onFillable exit HttpChannelState@a21898{s=IDLE a=NOT_ASYNC i=true r=IDLE w=false} null

Got it working, at least beyond the 503 error.
Had to find the right config for the reverse proxy.
after setting

        - com.df.servicePath=/openhab,/rest,/start,/habpanel,/habmin,/doc,/paperui
        - com.df.reqPathSearchReplace=/openhab,/

No error any more

The chellenge now is how to make autodiscovery for things possible, e.g. sonos, wemo.
openhab is not in the same subnet as the things

Afaik, UPnP does no discovery in different subnets, so Sonos and WeMo Binding will not work, as they have no possibility to set the device IP Address.

further problems:

OH is running inside a service on 2 internal overlay networks (10.0.0.0/24, 10.0.2.0/24) and one outgoing network interface (172.18.0.0/16).

With this setup jetty gets confused at least what I have seen with HomeMatic binding for the incoming 9125 port.

I set the explicitly in the configuration of the cal back address to outer address 192.168.3.250:

The debug shows that jetty tries to start listening on that ip:port instead of using the local assigned ip (172.18.0.8):

10:37:30.756 [DEBUG] [etty.util.component.AbstractLifeCycle] - starting org.eclipse.smarthome.binding.homematic.internal.communicator.server.XmlRpcServer$ResponseHandler@1fbfbea
10:37:30.761 [DEBUG] [.jetty.server.handler.AbstractHandler] - starting org.eclipse.smarthome.binding.homematic.internal.communicator.server.XmlRpcServer$ResponseHandler@1fbfbea
10:37:30.772 [DEBUG] [etty.util.component.AbstractLifeCycle] - STARTED @68985655ms org.eclipse.smarthome.binding.homematic.internal.communicator.server.XmlRpcServer$ResponseHandler@1fbfbea
10:37:30.775 [DEBUG] [etty.util.component.AbstractLifeCycle] - starting org.eclipse.jetty.server.handler.ErrorHandler@16fd7ac
10:37:30.780 [DEBUG] [.jetty.server.handler.AbstractHandler] - starting org.eclipse.jetty.server.handler.ErrorHandler@16fd7ac
10:37:30.785 [DEBUG] [etty.util.component.AbstractLifeCycle] - STARTED @68985669ms org.eclipse.jetty.server.handler.ErrorHandler@16fd7ac
10:37:30.792 [DEBUG] [etty.util.component.AbstractLifeCycle] - starting ServerConnector@fcd0a0{HTTP/1.1,[http/1.1]}{192.168.3.250:9125}
10:37:30.802 [WARN ] [etty.util.component.AbstractLifeCycle] - FAILED ServerConnector@fcd0a0{HTTP/1.1,[http/1.1]}{192.168.3.250:9125}: java.net.BindException: Cannot assign requested address
java.net.BindException: Cannot assign requested address
	at sun.nio.ch.Net.bind0(Native Method) ~[?:?]
	at sun.nio.ch.Net.bind(Net.java:433) ~[?:?]
	at sun.nio.ch.Net.bind(Net.java:425) ~[?:?]
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[?:?]
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[?:?]
	at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:331) ~[?:?]
	at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:299) ~[?:?]
	at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) ~[?:?]
	at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:235) ~[?:?]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ~[?:?]
	at org.eclipse.jetty.server.Server.doStart(Server.java:398) ~[?:?]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ~[?:?]
	at org.eclipse.smarthome.binding.homematic.internal.communicator.server.XmlRpcServer.start(XmlRpcServer.java:88) ~[?:?]
	at org.eclipse.smarthome.binding.homematic.internal.communicator.AbstractHomematicGateway.startServers(AbstractHomematicGateway.java:254) ~[?:?]
	at org.eclipse.smarthome.binding.homematic.internal.communicator.AbstractHomematicGateway.initialize(AbstractHomematicGateway.java:192) ~[?:?]
	at org.eclipse.smarthome.binding.homematic.handler.HomematicBridgeHandler.initializeInternal(HomematicBridgeHandler.java:108) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
	at java.lang.Thread.run(Thread.java:748) [?:?]
10:37:30.859 [WARN ] [etty.util.component.AbstractLifeCycle] - FAILED org.eclipse.jetty.server.Server@57fc07[9.4.11.v20180605]: java.net.BindException: Cannot assign requested address

tis is going to be painful get a solution

solution is in 2.5.0. Homematic has an addition parameter “Bind Address”

setting there 0.0.0.0 is the solution for homematic. Bridge goes online now

how does the UPnP work in OH?
sure there is a work arround as it is for homematic binding

got UPnp working too:

create on each swarm host a config net

docker network create  --config-only --subnet="192.168.3.0/24" --ip-range="192.168.3.2/24" -o parent=eth0 conf_net

and create a macvlan net on swarm

docker network create -d macvlan --scope swarm --config-from conf_net oh_vlan

adapt the service yaml

    image: openhab/openhab:2.5.0-snapshot
    networks:
      - monitor
      - proxy
      - oh_vlan
    volumes:
......

networks:
  monitor:
    external: true
  proxy:
    external: true  
  oh_vlan:
    external: true

the ifconfig on container level look like this:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.252  netmask 255.255.255.0  broadcast 192.168.3.255
        ether 02:42:c0:a8:03:02  txqueuelen 0  (Ethernet)
        RX packets 13939  bytes 14023768 (13.3 MiB)
        RX errors 0  dropped 693  overruns 0  frame 0
        TX packets 4799  bytes 438161 (427.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.0.0.63  netmask 255.255.255.0  broadcast 10.0.0.255
        ether 02:42:0a:00:00:3f  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 52  bytes 6203 (6.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.0.2.70  netmask 255.255.255.0  broadcast 10.0.2.255
        ether 02:42:0a:00:02:46  txqueuelen 0  (Ethernet)
        RX packets 10  bytes 1842 (1.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 53  bytes 6359 (6.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 58  bytes 6634 (6.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 58  bytes 6634 (6.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

reseted things changed in

/var/lib/openhab2/config/org/eclipse/smarthome/network.config

openhab starts attaching to .0.0.0.0 and now is reachable over the home network 192.168.2.252 and over the reverse proxy.
UPnP works too

I had the same problem with the release version of OH2.4 running in docker on a Synology Diskstation with two physical network interfaces.
I installed the test binding from here and set the binding address to 0.0.0.0.
Now my homematic works as expected.

@lukics - nice work.
I am early on my docker journey and contemplating shifting to docker for my OH setup (quite complex, on openhabian - RHEL Server)

Do you have anything you could share to get this going?
Your docker compose file perhaps?

and anything you learnt worth noting?

I am relatively sure I can get a standalone docker working, but I’ll eventually want to separate:
Influxdb, grafana, OH and my scripting on to islolted containers - on swarm or Kubernetes.

I also have some minor issues around persistent connections (like adb to my FireSticks) which may require some code to always favour specific container instances.

I am running openhab, grafana and influxdb on separate containers with no issues, all on one raspberry pi 3. I just followed the openhab docs for the openhab part and for the rest I just checked the config instructions in docker hub. It is relatively straightforward I would say, since I managed to get it up and running with no prior docker experience

As @cgeo said

I is quite straight forward to get it running in normal docker environment. This is also what i have in my pruduction right now. I have a dedicated a raspberry pi only for openhab, frontail and samba, each running in separate containers. samba I use to get access to the openhab folders. Frontail is to get the logs more comfortable.

Regarding the docker swarm I am still having my problems getting it production like for openhab.On the swarm I have influxdb, grafana, ebusd and mosquitto running. Swarm has all sort of limitations which I learn one by one, the workarrounds not always stable. To sum it up I cannot share anything which would not give more pain, then releave for a novice on docker topic.

My suggestion is start it simple with docker (no swarm mode). If you openhab installation is simple also put everything on one raspberry pi. God starting point is also the hypriot image.

Once I have stable solution I will publish it as a knowledge how-to article.

1 Like

Myself, I’m fighting with defining the ingress network and having the docker images joining the right network at the right time. Not sure whether a swarm setup is the right thing for a simple home installation but the automatic failover would be a wonderful feature to have…

You can use macvlan and assign a fixed ip to a running openhab container running iside docker swram:

docker network create --config-only --subnet 192.168.3.0/24 --gateway 192.168.3.1 --ip-range 192.168.3.168/32 -o parent=eth0  oh-config

docker network create -d macvlan  --scope swarm --config-from oh-config oh-macvlan

version: "3"

services:

  openhab:
    image: openhab/openhab:2.4.0
    networks:
      - oh-macvlan
    ports:
      - 9125:9125
      - 9126:9126
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - /datavol/openhab/openhab_addons:/openhab/addons 
      - /datavol/openhab/openhab_conf:/openhab/conf 
      - /datavol/openhab/openhab_userdata:/openhab/userdata 
    environment:
      - OPENHAB_HTTP_PORT=8080
      - OPENHAB_HTTPS_PORT=8443
      - EXTRA_JAVA_OPTS=-Duser.timezone=Europe/Berlin -Xms400m -Xmx650m
      - CRYPTO_POLICY=unlimited
 
networks:
  oh-macvlan:
    external: true

In network configuration of OH you then define this fixed IP as your main IP including broadcast.

Struggling as well. Will try the macvlan. Found on other dockers with swarm that it sometimes helps to use aliases to force using a specific network. It seems docker sometimes uses the ingress and then refuses connections (had this with node-red and my nefiteasy containers.j

I more and more think that docker swarm mode is not mature enough.
At least for my use case.
I am thinking to give kubernetes a try.

Could you be more specific on that work around.
I am waiting on this PR in docker to probably solve my issue with MCVLAN. right now all my node are somwhat poisened and getting alway errors:

m8dv8swgi04co   openhab_openhab.1  openhab/openhab:2.4.0   vevedock-01    Ready               Rejected 1 second ago     "network dm-1govxjctvgvi is already using parent interface eth0" 

Well I do not know if it is a workaround: in my case a connection used the wrong network. By giving each network their own specific alias/hostname, you can make sure that if you configure a connection to nodered-iot, it is using thát network interface, and not the ingress or arbitrary one. It looks like this in your compose file under the service nodered for instance:
networks:
iot-lan:
aliases:
- nodered-iot
web-lan:
aliases:
- nodered-web