Testing docker deployment - Endless "Something went wrong" loop

I’m testing the docker deployment and not having much luck.

It’s likely configuration and/or networking, but not being familiar with all the Jitsi sub-systems, it’s not obvious to this mere mortal where to look. As a side note, I do seem to have it working well on my vagrant instance, but not once I deploy to my production VM. The difference being that my workstation has internet access and production servers will never have.

I get trapped in an endless “Something went wrong” loop as soon as another browser joins the room. The room does display a few seconds of video and screen sharing, but then starts the “something went wrong loop”.

  • This is LAN deployment.
  • No outgoing internet access will be allowed.
  • CentOS 7.5 server + Docker CE
  • iptables accepts all TCP and UDP traffic (as a temp measure to eliminate iptables as the problem)
  • iptables is routing 80 to 8000, 443 to 8443
  • nmap confirms open ports TCP 80, 443 and UDP 10000
  • .env: DOCKER_HOST_ADDRESS has been set to the client resolvable server IP
  • .env: ENABLE_AUTH=0
  • .env: ENABLE_GUESTS=0
  • .env: ENABLE_HTTP_REDIRECT=1
  • Using our corporate certificates in /root/.jitsi-meet-config/web/nginx/keys

I have tried the following, but no difference observed:

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>

Browser logging that might be relevant:

[conference.js] <value>:  CONFERENCE FAILED: conference.videobridgeNotAvailable Logger.js:124
[JitsiMeetJS.js] <getGlobalOnErrorHandler>:  UnhandledError: null Script: null Line: null Column: null StackTrace:  Error: "Strophe: updateLargeVideo@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:661311
_updateLargeVideoIfDisplayed@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:663201
onRemoteStreamRemoved@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:655351
w.removeRemoteStream@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:2901588
@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:266129
@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:162336
_setupListeners/<@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:2842202
r.prototype.emit@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:97567
i.prototype.onRemoteTrackRemoved/<@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:247334
i.prototype.onRemoteTrackRemoved@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:247236
r.prototype.emit@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:97567
i.prototype._removeRemoteTrack@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:967138
i.prototype.close@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:979271
value@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:790530
i.prototype.leave@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:235114
value@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:2827128
r.prototype.emit@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:97567
r.prototype.emit@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:97811
value@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:175676
value@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:749884
run@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:23120
_dataRecv/<@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:31440
forEachChild@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:14882
_dataRecv@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:31273
_onRequestStateChange@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:50800
"
	log https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:813604
	fatal https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:20089
	_handleError https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:19483
	run https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:23151
	_dataRecv https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:31440
	forEachChild https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:14882
	_dataRecv https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:31273
	_onRequestStateChange https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:50800
Logger.js:124:12
n
Logger.js:124:12
getGlobalOnErrorHandler
JitsiMeetJS.js:535:8
window.onerror
middleware.js:100:12
callErrorHandler
GlobalOnErrorHandler.js:61:8
t.a/i.Strophe.log
strophe.util.js:89:12
fatal
strophe.js:2093:8
_handleError
strophe.js:1995:12
run
strophe.js:2558:12
_dataRecv/<
strophe.js:3822:28
forEachChild
strophe.js:1522:16
_dataRecv
strophe.js:3810:8
_onRequestStateChange
strophe.js:5559:12
[modules/xmpp/strophe.util.js] <t.a/i.Strophe.log>:  Strophe: updateLargeVideo@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:661311
_updateLargeVideoIfDisplayed@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:663201
onRemoteStreamRemoved@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:655351
w.removeRemoteStream@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:2901588
@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:266129
@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:162336
_setupListeners/<@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:2842202
r.prototype.emit@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:97567
i.prototype.onRemoteTrackRemoved/<@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:247334
i.prototype.onRemoteTrackRemoved@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:247236
r.prototype.emit@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:97567
i.prototype._removeRemoteTrack@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:967138
i.prototype.close@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:979271
value@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:790530
i.prototype.leave@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:235114
value@https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2:2827128
r.prototype.emit@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:97567
r.prototype.emit@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:97811
value@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:175676
value@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:749884
run@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:23120
_dataRecv/<@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:31440
forEachChild@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:14882
_dataRecv@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:31273
_onRequestStateChange@https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:50800
Logger.js:124:12
[JitsiMeetJS.js] <getGlobalOnErrorHandler>:  UnhandledError: null Script: null Line: null Column: null StackTrace:  Error: "Strophe: error: undefined https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2 - TypeError: this.getSmallVideo(...) is undefined"
	log https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:813604
	fatal https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:20089
	_handleError https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:19610
	run https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:23151
	_dataRecv https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:31440
	forEachChild https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:14882
	_dataRecv https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:31273
	_onRequestStateChange https://jitsi2.mycompany.net/libs/lib-jitsi-meet.min.js?v=3081:2:50800
Logger.js:124:12
[modules/xmpp/strophe.util.js] <t.a/i.Strophe.log>:  Strophe: error: undefined https://jitsi2.mycompany.net/libs/app.bundle.min.js?v=3081:2 - TypeError: this.getSmallVideo(...) is undefined

The jvb process:

polkitd  118591 118588 47 00:51 ?        00:00:05 java -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Djava.library.path=/usr/share/jitsi-videobridge/lib/native/linux-64 -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/ -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=config -Djava.util.logging.config.file=/config/logging.properties -Dorg.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=172.18.0.4 -Dorg.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=10.106.10.39 -cp /usr/share/jitsi-videobridge/jitsi-videobridge.jar:/usr/share/jitsi-videobridge/lib/agafua-syslog-0.4.jar:/usr/share/jitsi-videobridge/lib/annotations-15.0.jar:/usr/share/jitsi-videobridge/lib/bccontrib-1.0.jar:/usr/share/jitsi-videobridge/lib/bcpkix-jdk15on-1.54.jar:/usr/share/jitsi-videobridge/lib/bcprov-jdk15on-1.54.jar:/usr/share/jitsi-videobridge/lib/callstats-java-sdk-5.0.0.jar:/usr/share/jitsi-videobridge/lib/cglib-nodep-2.2.2.jar:/usr/share/jitsi-videobridge/lib/commons-codec-1.6.jar:/usr/share/jitsi-videobridge/lib/commons-lang3-3.1.jar:/usr/share/jitsi-videobridge/lib/commons-logging-1.2.jar:/usr/share/jitsi-videobridge/lib/concurrentlinkedhashmap-lru-1.0_jdk5.jar:/usr/share/jitsi-videobridge/lib/core-2.0.1.jar:/usr/share/jitsi-videobridge/lib/dnsjava-2.1.7.jar:/usr/share/jitsi-videobridge/lib/dom4j-1.6.1.jar:/usr/share/jitsi-videobridge/lib/fmj-1.0-20161207.221530-23.jar:/usr/share/jitsi-videobridge/lib/gson-2.3.1.jar:/usr/share/jitsi-videobridge/lib/guava-15.0.jar:/usr/share/jitsi-videobridge/lib/httpclient-4.4.jar:/usr/share/jitsi-videobridge/lib/httpcore-4.4.jar:/usr/share/jitsi-videobridge/lib/ice4j-2.0.0-20181005.221549-11.jar:/usr/share/jitsi-videobridge/lib/jain-sip-ri-ossonly-1.2.98c7f8c-jitsi-oss1.jar:/usr/share/jitsi-videobridge/lib/java-dogstatsd-client-2.5.jar:/usr/share/jitsi-videobridge/lib/java-sdp-nist-bridge-1.1.jar:/usr/share/jitsi-videobridge/lib/javax.servlet-api-3.1.0.jar:/usr/share/jitsi-videobridge/lib/jbosh-0.9.0.jar:/usr/share/jitsi-videobridge/lib/jcip-annotations-1.0.jar:/usr/share/jitsi-videobridge/lib/jcl-core-2.8.jar:/usr/share/jitsi-videobridge/lib/jetty-client-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-continuation-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-http-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-io-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-proxy-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-rewrite-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-security-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-server-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-servlet-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-servlets-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-util-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/jetty-webapp-7.0.1.v20091125.jar:/usr/share/jitsi-videobridge/lib/jetty-xml-7.0.1.v20091125.jar:/usr/share/jitsi-videobridge/lib/jicoco-1.1-20180821.201527-7.jar:/usr/share/jitsi-videobridge/lib/jitsi-android-osgi-1.0-20180322.162617-2.jar:/usr/share/jitsi-videobridge/lib/jitsi-configuration-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-dnsservice-2.9-20150723.181644-1.jar:/usr/share/jitsi-videobridge/lib/jitsi-fileaccess-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-netaddr-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-packetlogging-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-protocol-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-protocol-jabber-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-protocol-media-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-resourcemanager-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-stats-1.0-20180523.024051-5.jar:/usr/share/jitsi-videobridge/lib/jitsi-ui-service-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jitsi-util-2.13.389bc25.jar:/usr/share/jitsi-videobridge/lib/jna-4.1.0.jar:/usr/share/jitsi-videobridge/lib/jnsapi-0.0.3-jitsi-smack4.2-3.jar:/usr/share/jitsi-videobridge/lib/jose4j-0.5.1.jar:/usr/share/jitsi-videobridge/lib/json-simple-1.1.1.jar:/usr/share/jitsi-videobridge/lib/jul-to-slf4j-1.7.7.jar:/usr/share/jitsi-videobridge/lib/jxmpp-core-0.6.0.jar:/usr/share/jitsi-videobridge/lib/jxmpp-jid-0.6.0.jar:/usr/share/jitsi-videobridge/lib/jxmpp-util-cache-0.6.0.jar:/usr/share/jitsi-videobridge/lib/libidn-1.15.jar:/usr/share/jitsi-videobridge/lib/libjitsi-1.0-20180904.192703-363.jar:/usr/share/jitsi-videobridge/lib/log4j-1.2.15.jar:/usr/share/jitsi-videobridge/lib/log4j-api-2.3.jar:/usr/share/jitsi-videobridge/lib/log4j-core-2.3.jar:/usr/share/jitsi-videobridge/lib/object-cloner-0.1.jar:/usr/share/jitsi-videobridge/lib/objenesis-2.2.jar:/usr/share/jitsi-videobridge/lib/okhttp-3.9.1.jar:/usr/share/jitsi-videobridge/lib/okio-1.13.0.jar:/usr/share/jitsi-videobridge/lib/orange-extensions-1.3.0.jar:/usr/share/jitsi-videobridge/lib/org.apache.felix.framework-4.4.0.jar:/usr/share/jitsi-videobridge/lib/org.apache.felix.main-4.4.0.jar:/usr/share/jitsi-videobridge/lib/org.osgi.core-4.3.1.jar:/usr/share/jitsi-videobridge/lib/osgi-over-slf4j-1.7.7.jar:/usr/share/jitsi-videobridge/lib/sdes4j-1.1.3.jar:/usr/share/jitsi-videobridge/lib/sdp-api-1.0.jar:/usr/share/jitsi-videobridge/lib/sigar-1.6.4.jar:/usr/share/jitsi-videobridge/lib/slf4j-api-1.7.7.jar:/usr/share/jitsi-videobridge/lib/slf4j-jdk14-1.7.7.jar:/usr/share/jitsi-videobridge/lib/slf4j-simple-1.6.1.jar:/usr/share/jitsi-videobridge/lib/smack-bosh-4.2.1.jar:/usr/share/jitsi-videobridge/lib/smack-core-4.2.2-b1c107f.jar:/usr/share/jitsi-videobridge/lib/smack-debug-4.2.1.jar:/usr/share/jitsi-videobridge/lib/smack-experimental-4.2.1.jar:/usr/share/jitsi-videobridge/lib/smack-extensions-4.2.2-b1c107f.jar:/usr/share/jitsi-videobridge/lib/smack-im-4.2.2-b1c107f.jar:/usr/share/jitsi-videobridge/lib/smack-java7-4.2.1.jar:/usr/share/jitsi-videobridge/lib/smack-legacy-4.2.1.jar:/usr/share/jitsi-videobridge/lib/smack-resolver-javax-4.2.1.jar:/usr/share/jitsi-videobridge/lib/smack-sasl-javax-4.2.1.jar:/usr/share/jitsi-videobridge/lib/smack-tcp-4.2.2-b1c107f.jar:/usr/share/jitsi-videobridge/lib/tinder-1.3.0.jar:/usr/share/jitsi-videobridge/lib/websocket-api-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/websocket-client-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/websocket-common-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/websocket-server-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/websocket-servlet-9.2.10.v20150310.jar:/usr/share/jitsi-videobridge/lib/weupnp-0.1.4.jar:/usr/share/jitsi-videobridge/lib/xml-apis-1.0.b2.jar:/usr/share/jitsi-videobridge/lib/xmlpull-1.1.3.4a.jar:/usr/share/jitsi-videobridge/lib/xpp3-1.1.4c.jar:/usr/share/jitsi-videobridge/lib/zrtp4j-light-3.2.0-jitsi-1-20150723.002345-1.jar org.jitsi.videobridge.Main --apis=none

The JVB log:

jvb_1      | JVB 2018-12-20 02:05:24.325 SEVERE: [19] org.jitsi.videobridge.health.Health.log() Health check failed in 0ms:
jvb_1      | java.lang.Exception: Address discovery through STUN failed
jvb_1      | 	at org.jitsi.videobridge.health.Health.doCheck(Health.java:217)
jvb_1      | 	at org.jitsi.videobridge.health.Health.doRun(Health.java:495)
jvb_1      | 	at org.jitsi.util.concurrent.PeriodicRunnableWithObject.run(PeriodicRunnableWithObject.java:87)
jvb_1      | 	at org.jitsi.util.concurrent.RecurringRunnableExecutor.run(RecurringRunnableExecutor.java:216)
jvb_1      | 	at org.jitsi.util.concurrent.RecurringRunnableExecutor.runInThread(RecurringRunnableExecutor.java:292)
jvb_1      | 	at org.jitsi.util.concurrent.RecurringRunnableExecutor.access$000(RecurringRunnableExecutor.java:36)
jvb_1      | 	at org.jitsi.util.concurrent.RecurringRunnableExecutor$1.run(RecurringRunnableExecutor.java:328)

Questions:

  1. Given the docker setup, can you confirm that org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS means the 172.x docker container IP with the docker network?
  2. And that org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS, given the LAN-only deployment means the host server IP?
  3. Will STUN failure break the video bridge? It seems to.

Anything else I can provide?

I have seen this before IIRC. The problem is the JVB doesn’t start, since the error you get is that there is no JVB available. Now, did you modify the JVB_STUN_SERVERS env variable? It points to public STUN servers, which you are not able to contact. Try setting it empty instead: JVB_STUN_SERVERS=

Thanks for the reply.

Changing my .env to:

JVB_STUN_SERVERS=

or

#JVB_STUN_SERVERS=stun.l.google.com:19302,stun1.l.google.com:19302,stun2.l.google.com:19302

Generates /root/.jitsi-meet-cfg/jvb/sip-communicator.properties

org.jitsi.videobridge.AUTHORIZED_SOURCE_REGEXP=focus@auth.meet.jitsi/.*
org.jitsi.videobridge.SINGLE_PORT_HARVESTER_PORT=10000
org.jitsi.videobridge.DISABLE_TCP_HARVESTER=true
org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=<no value>

org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=xmpp.meet.jitsi
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.meet.jitsi
org.jitsi.videobridge.xmpp.user.shard.USERNAME=jvb
org.jitsi.videobridge.xmpp.user.shard.PASSWORD=passw0rd
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=jvbbrewery@internal-muc.meet.jitsi
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=8ba1235f3511
org.jitsi.videobridge.xmpp.user.shard.DISABLE_CERTIFICATE_VERIFICATION=true

org.jitsi.videobridge.ENABLE_STATISTICS=true
org.jitsi.videobridge.STATISTICS_TRANSPORT=muc
org.jitsi.videobridge.STATISTICS_INTERVAL=5000

Which JVB does not support:

jvb_1      | JVB 2018-12-20 19:20:26.243 SEVERE: [19] org.jitsi.videobridge.health.Health.log() Health check failed in 2ms:
jvb_1      | java.lang.NullPointerException
jvb_1      | 	at org.ice4j.ice.Agent.<init>(Agent.java:372)
jvb_1      | 	at org.jitsi.videobridge.IceUdpTransportManager.createIceAgent(IceUdpTransportManager.java:1069)
jvb_1      | 	at org.jitsi.videobridge.IceUdpTransportManager.<init>(IceUdpTransportManager.java:565)
jvb_1      | 	at org.jitsi.videobridge.IceUdpTransportManager.<init>(IceUdpTransportManager.java:526)
jvb_1      | 	at org.jitsi.videobridge.Channel.createTransportManager(Channel.java:322)
jvb_1      | 	at org.jitsi.videobridge.Channel.initialize(Channel.java:673)
jvb_1      | 	at org.jitsi.videobridge.RtpChannel.initialize(RtpChannel.java:891)
jvb_1      | 	at org.jitsi.videobridge.Content.createRtpChannel(Content.java:339)
jvb_1      | 	at org.jitsi.videobridge.Content.createRtpChannel(Content.java:263)
jvb_1      | 	at org.jitsi.videobridge.health.Health.check(Health.java:152)
jvb_1      | 	at org.jitsi.videobridge.health.Health.doCheck(Health.java:244)
jvb_1      | 	at org.jitsi.videobridge.health.Health.doRun(Health.java:495)
jvb_1      | 	at org.jitsi.util.concurrent.PeriodicRunnableWithObject.run(PeriodicRunnableWithObject.java:87)
jvb_1      | 	at org.jitsi.util.concurrent.RecurringRunnableExecutor.run(RecurringRunnableExecutor.java:216)
jvb_1      | 	at org.jitsi.util.concurrent.RecurringRunnableExecutor.runInThread(RecurringRunnableExecutor.java:292)
jvb_1      | 	at org.jitsi.util.concurrent.RecurringRunnableExecutor.access$000(RecurringRunnableExecutor.java:36)
jvb_1      | 	at org.jitsi.util.concurrent.RecurringRunnableExecutor$1.run(RecurringRunnableExecutor.java:328)

Although, if I have my Ansible code clear the property after the configuration is created, and restart all containers, things do seem more stable.

“Manually” updated /root/.jitsi-meet-cfg/jvb/sip-communicator.properties:

org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=

And I assume it had this seemingly positive effect on JVB:
jvb_1 | JVB 2018-12-20 19:43:53.988 INFO: [19] org.jitsi.videobridge.health.Health.log() Performed a successful health check in 83ms. Sticky failure: false

Audio, video and screen sharing works in Firefox 64 on Ubuntu 16.04.

Thanks for sharing! Indeed the <no value> will cause trouble. A fix for that is coming up soon, so in the future commenting the topion out or setting it empty will work out of the box.