canyanio / janus-gateway-docker Goto Github PK
View Code? Open in Web Editor NEWDocker image for the Janus WebRTC Server
License: Other
Docker image for the Janus WebRTC Server
License: Other
In the Janus log I see the following error for some clients:
[libwebsockets][ERR] Ran out of header data space
It looks like the issue is the cookies the browser (Chrome in this case) sends in the Websocket request for certain clients. I run several websites off my domain (i.e. the main website, a store, systems on subdomains) so there are cookies from Google, Facebook, Shopify, to name a few. If a client has visited these sites they will accumulate enough cookie data to exceed the default "max_http_header_data" value in libwebsockets.
This can be verified by using a client that hasn't accumulated a lot of cookies or by opening an Incognito window in Chrome which strips out the stored cookies.
How would we increase this limit? I believe it could/should be done in the Janus transport plugin, where it configures libwebsocket but there's also a way to change the default 4096 byte limit at build time of libwebsockets. Can that be done with this Docker image?
Other than this issue this image has been working perfectly, so thank you for your work!
Hello,
I modified the docker-compose.yml
file like this:
version: '2.1'
services:
janus-gateway:
image: 'canyan/janus-gateway:0.10.7'
command: ["/usr/local/bin/janus", "-F", "/usr/local/etc/janus"]
ports:
- "8188:8188"
- "8088:8088"
- "8089:8089"
- "8889:8889"
- "8000:8000"
- "7088:7088"
- "7089:7089"
- "20000-20500:20000-20500/udp"
environment:
- GIT_BRANCH=multistream
volumes:
- "./janus-configs/:/usr/local/etc/janus/"
Here I mentioned GIT_BRANCH=multistream
. But, it seems multistream
branch is not running in my docker container. I killed the previous docker image and run docker-compose up -d
again though. How can I check this and ensure that specific branch of janus is running?
Hello,
there is the issue I get when attempting to build this docker image myself:
sh: 0: cannot open autogen.sh: No such file
$ docker build -t my-janus-gateway:1.0.0 .
...
Step 5/41 : COPY . /usr/local/src/janus-gateway
---> 4163269232c9
Step 6/41 : RUN cd /usr/local/src/janus-gateway && sh autogen.sh && ./configure --prefix=/usr/local && make && make install && make configs
---> Running in 6f1117925bc1
sh: 0: cannot open autogen.sh: No such file
The command '/bin/sh -c cd /usr/local/src/janus-gateway && sh autogen.sh && ./configure --prefix=/usr/local && make && make install && make configs' returned a non-zero code: 2
When I run docker-compose up with docker-compose file
version: '2.1'
services:
#
# janus-gateway
#
janus-gateway:
image: 'canyan/janus-gateway:0.10.7'
command: ["/usr/local/bin/janus", "-F", "/usr/local/etc/janus"]
ports:
- "8088:8088"
- "8089:8089"
- "8889:8889"
- "8000:8000"
- "7088:7088"
- "7089:7089"
volumes:
- "./etc/janus/janus.jcfg:/usr/local/etc/janus/janus.jcfg"
- "./etc/janus/janus.eventhandler.sampleevh.jcfg:/usr/local/etc/janus/janus.eventhandler.sampleevh.jcfg"
restart: always
, I get error ERROR: pull access denied for janusgatewaydocker, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
.
Does anyone have a solution to this problem?
...
Loading transport plugin 'libjanus_websockets.so'...
libwebsockets logging: 2047
[libwebsockets][INFO] Initial logging level 2047
[libwebsockets][INFO] Libwebsockets version: 4.0.20 unknown-build-hash
[libwebsockets][INFO] IPV6 compiled in and enabled
[libwebsockets][INFO] LWS_DEF_HEADER_LEN : 4096
[libwebsockets][INFO] LWS_MAX_SMP : 1
[libwebsockets][INFO] sizeof (*info) : 704
[libwebsockets][INFO] SYSTEM_RANDOM_FILEPATH: '/dev/urandom'
[libwebsockets][INFO] HTTP2 support : available
[libwebsockets][DEBUG] _realloc: size 9000: context
[libwebsockets][INFO] context created
[libwebsockets][INFO] Using event loop: poll
[libwebsockets][INFO] Default ALPN advertisment: h2,http/1.1
[libwebsockets][INFO] default timeout (secs): 20
[libwebsockets][INFO] Threads: 1 each 1073741816 fds
[libwebsockets][INFO] mem: context: 8096 B (4000 ctx + (1 thr x 4096))
[libwebsockets][INFO] mem: http hdr size: (4096 + 976), max count 1073741816
[libwebsockets][DEBUG] _realloc: size 18446744073709551552: fds table
[libwebsockets][ERR] OOM allocating 1073741816 fds
[libwebsockets][INFO] lws_context_destroy: ctx 0x55ca479e0930
[libwebsockets][DEBUG] _lws_state_transition: (null): changed 0 '0' -> 11 '0'
[libwebsockets][INFO] lws_pt_destroy: pt destroyed
[libwebsockets][INFO] lws_context_destroy2: ctx 0x55ca479e0930
[libwebsockets][DEBUG] 0x7f81d81a4810: post vh listl
[libwebsockets][DEBUG] 0x7f81d81a4810: post pdl
[libwebsockets][ERR] ZERO RANDOM FD
[libwebsockets][DEBUG] 0x7f81d81a4810: baggage
[libwebsockets][DEBUG] 0x7f81d81a4810: post dc2
[libwebsockets][INFO] lws_system_blob_destroy: blob 0x55ca479e09f0
[libwebsockets][INFO] lws_system_blob_destroy: blob 0x55ca479e0a08
[libwebsockets][INFO] lws_system_blob_destroy: blob 0x55ca479e0a20
[libwebsockets][INFO] lws_system_blob_destroy: blob 0x55ca479e0a38
[libwebsockets][INFO] lws_system_blob_destroy: blob 0x55ca479e0a50
[libwebsockets][INFO] lws_system_blob_destroy: blob 0x55ca479e0a68
[libwebsockets][INFO] lws_system_blob_destroy: blob 0x55ca479e0a80
[libwebsockets][INFO] lws_system_blob_destroy: blob 0x55ca479e0a98
[libwebsockets][INFO] lws_context_destroy3: ctx 0x55ca479e0930 freed
[ERR] [transports/janus_websockets.c:janus_websockets_init:577] Error creating libwebsockets context...
The important line is: [libwebsockets][ERR] OOM allocating 1073741816 fds
.
This happens if the ulimit is set to infinity on systemd for the docker service (or cgroups/whatever you are using) and because of how the code is written here.
I had to change this on my machine (or in the docker-compose file by setting ulimit to a sane value) but I suppose it is not really straightforward to debug, do you think it is valuable to add something in the README or anywhere regarding this?
version: "2"
services:
janus:
image: canyan/janus-gateway:latest
ports:
- 8188:8188
- 8088:8088
- 8089:8089
- 8889:8889
- 8000:8000
- 7088:7088
- 7089:7089
ulimits:
nofile:
soft: 200000
hard: 200000
Hello,
I get the ICE failed for component 1 in stream 1...
error on the local network,
My container IP is 172.18.0.2
and my host IP is 192.168.8.100
,
I also tested with STUN and TURN server, but error still occurs.
it seems is a docker container networking error, Any ideas for this ?
Hi!
When I launched the container with docker run -p 8088:8088 -p 8089:8089 -p 8889:8889 -p 8000:8000 -p 7088:7088 -p 7089:7089 <image_id>
, I can access Janus through http://127.0.0.1:8088/
. However, if I try to use host network with docker run --network host <image_id>
, I am not able to access Janus service.
If I run this image canyan/janus-gateway:0.10.7 on ARM framework Ubuntu, The docker logs "standard_init_linux.go:228: exec user process caused: exec format error"
I think the reason is ARM system can not support this image environment.
I want to know if we have the image that can support the ARM framework system.
Thanks
This is a question rather than an issue. I am trying to use this as my docker container with a network mode host. But figured out that it is not exposing port 8188.
in this docker,how to make and join janus-pp-rec, i want to make install and use janus-pp-rec ?
Hi!
I'm using janus-gateway-docker and when I run the docker using YAML file janus start will full trickle mode.
I saw that the default is full trickle off but I don't know why it start with full trickle on.
I try to force it to be off by the flag --full-trickle=off or -f off but it ignores the flag..
I use YAML file and try multi variations:
First:
containers:
- name: janus-test
image: canyan/janus-gateway:latest
command:
- /usr/local/bin/janus
- '-F'
- /usr/local/etc/janus
- '--full-trickle=off'
args:
- '--nat-1-1=ip'
- '-r'
- start-end
Second:
containers:
- name: janus-test
image: canyan/janus-gateway:latest
command:
- /usr/local/bin/janus
- '-F'
- /usr/local/etc/janus
- '--full-trickle=false'
args:
- '--nat-1-1=ip'
- '-r'
- start-end
3:
containers:
- name: janus-test
image: canyan/janus-gateway:latest
command:
- /usr/local/bin/janus
- '-F'
- /usr/local/etc/janus
- 'f'
- off
args:
- '--nat-1-1=ip'
- '-r'
- start-end
4:
containers:
- name: janus-test
image: canyan/janus-gateway:latest
command:
- /usr/local/bin/janus
- '-F'
- /usr/local/etc/janus
- 'f'
- false
args:
- '--nat-1-1=ip'
- '-r'
- start-end
5:
containers:
- name: janus-test
image: canyan/janus-gateway:latest
command:
- /usr/local/bin/janus
- '-F'
- /usr/local/etc/janus
args:
- '--nat-1-1=ip'
- '-f'
- off
- '-r'
- start-end
Nothing worked.
I thought maybe it's ICE issue when Janus starts and Janus have mechanism to switch to full trickle mode when it has problem getting ICE on startup?
I will be glad for your help,
Barak
I was curious why this is running on the Debian testing version?
I get the following error when I run docker-compose up
.
Creating network "janus_default" with the default driver
Creating janus_janus-gateway_1 ... error
ERROR: for janus_janus-gateway_1 Cannot start service janus-gateway: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/Users/abisheksrikaanth/projects/janus/etc/janus/janus.jcfg\\\" to rootfs \\\"/var/lib/docker/overlay2/55ac8c94564eb9f452cf24add575444d7e92676c900bc183b3576bc97c04d137/merged\\\" at \\\"/var/lib/docker/overlay2/55ac8c94564eb9f452cf24add575444d7e92676c900bc183b3576bc97c04d137/merged/usr/local/etc/janus/janus.jcfg\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
ERROR: for janus-gateway Cannot start service janus-gateway: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/Users/abisheksrikaanth/projects/janus/etc/janus/janus.jcfg\\\" to rootfs \\\"/var/lib/docker/overlay2/55ac8c94564eb9f452cf24add575444d7e92676c900bc183b3576bc97c04d137/merged\\\" at \\\"/var/lib/docker/overlay2/55ac8c94564eb9f452cf24add575444d7e92676c900bc183b3576bc97c04d137/merged/usr/local/etc/janus/janus.jcfg\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
ERROR: Encountered errors while bringing up the project.
Here is the contents of my docker-compose.yml
version: '2.1'
services:
#
# janus-gateway
#
janus-gateway:
image: 'canyan/janus-gateway:latest'
command: [ "/usr/local/bin/janus", "-F", "/usr/local/etc/janus" ]
ports:
- "8088:8088"
- "8089:8089"
- "8889:8889"
- "8000:8000"
- "7088:7088"
- "7089:7089"
volumes:
- "./etc/janus/janus.jcfg:/usr/local/etc/janus/janus.jcfg"
- "./etc/janus/janus.eventhandler.sampleevh.jcfg:/usr/local/etc/janus/janus.eventhandler.sampleevh.jcfg"
restart: always
Am I missing something?
Forgive me if I've missed this, but it doesn't look like janus.js is exposed anywhere as part of this image. When using this as part of a docker compose, it can be tricky to automatically get the right version of janus.js hosted as part of the service. Have you found a good way to handle this?
Currently, the CI delivers master-branch images, is it possible to add support for 0.x legacy images CI delivery? Thanks.
I tried to build the janus legacy image myself, but failed, [sigh].
Optionally, with duktape enabled would be nice, haha
My application in killed state. Now i received the call and trying to connect to janus socket with the join callback it's taking around 5 to 10 seconds to connect.
what could be the problem
Hi, I'm running into the following error running the docker compose example in the readme:
ERROR: for janusdock_janus-gateway_1 Cannot start service janus-gateway: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/home/XXXXX/janusDock/etc/janus/janus.jcfg" to rootfs at "/usr/local/etc/janus/janus.jcfg" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
ERROR: for janus-gateway Cannot start service janus-gateway: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/home/XXXXX/janusDock/etc/janus/janus.jcfg" to rootfs at "/usr/local/etc/janus/janus.jcfg" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
ERROR: Encountered errors while bringing up the project.
Any thoughts what I might be doing wrong?
Hey, I love the project! It seems to be the most active Janus docker container project out there.
I am struggling with some of the core concepts, though. How do you expect clients to connect to a webrtc server that's not only behind a NAT but doesn't expose any UDP ports whatsoever? Is a TURN server a mandatory requirement for using this docker image? If not, how else would a UDP connection for actual media routing be made?
We're currently running Janus on a fully exposed machine with a 1:1 NAT mapping to its public IP. This deployment works fine, but the UDP ports offered by Janus' SDP is part of a huge range, and that's apparently one of the key requirements for running a webrtc server for media routing: https://serverfault.com/questions/954715/webrtc-mcu-sfu-inside-kubernetes-port-ranges
I appreciate any feedback on this!
I'm using Janus 0.10.8 version with docker image (git hash: 235baff)
The Janus server suddenly stopped. It's AWS EC2 ubuntu server (c4.xlarge)
The crash log of janus is below.
janus-gateway_1 | Stopping server, please wait...
janus-gateway_1 | Ending sessions timeout watchdog...
janus-gateway_1 | Sessions watchdog stopped
janus-gateway_1 | Closing transport plugins:
janus-gateway_1 | Stopping webserver(s)...
janus-gateway_1 | JANUS REST (HTTP/HTTPS) transport plugin destroyed!
janus-gateway_1 | Nanomsg thread ended
janus-gateway_1 | JANUS Nanomsg transport plugin destroyed!
janus-gateway_1 | WebSockets thread ended
janus-gateway_1 | [WSS-0x7f1100000b60] Destroying WebSocket client
janus-gateway_1 | Destroying session 8506915176662784; 0x7f1100006350
janus-gateway_1 | Detaching handle from JANUS VideoRoom plugin; 0x7f1144004e50 0x7f114401a430 0x7f1144004e50 0x7f11440233a0
janus-gateway_1 | [janus.plugin.videoroom-0x7f114401a430] No WebRTC media anymore; 0x7f1144004e50 0x7f11440233a0
janus-gateway_1 | Destroying session 8998122000162750; 0x7f114403cf70
janus-gateway_1 | Detaching handle from JANUS VideoRoom plugin; 0x7f1144006e90 0x7f1144011bd0 0x7f1144006e90 0x7f11440459d0
janus-gateway_1 | Destroying session 4024719089612598; 0x7f11440088f0
janus-gateway_1 | [1093486018250755] Handle and related resources freed; 0x7f1144004e50 0x7f1100006350
janus-gateway_1 | Ending requests thread...
janus-gateway_1 | [janus.plugin.videoroom-0x7f1144037700] No WebRTC media anymore; 0x7f1144022470 0x7f1144033d50
janus-gateway_1 | [6721522702610709] Handle and related resources freed; 0x7f1144022470 0x7f1144012b80
janus-gateway_1 | [janus.plugin.videoroom-0x7f11440144b0] No WebRTC media anymore; 0x7f114400e660 0x7f114405a410
janus-gateway_1 | Leaving Janus requests handler thread
janus-gateway_1 | Destroying sessions...
janus-gateway_1 | Freeing crypto resources...
janus-gateway_1 | De-initializing SCTP...
janus-gateway_1 | Closing plugins:
janus-gateway_1 | JANUS AudioBridge plugin destroyed!
janus-gateway_1 | JANUS Record&Play plugin destroyed!
janus-gateway_1 | JANUS TextRoom plugin destroyed!
janus-gateway_1 | JANUS VideoRoom plugin destroyed!
janus-gateway_1 | JANUS NoSIP plugin destroyed!
janus-gateway_1 | JANUS VideoCall plugin destroyed!
janus-gateway_1 | JANUS SIP plugin destroyed!
janus-gateway_1 | JANUS EchoTest plugin destroyed!
janus-gateway_1 | JANUS Streaming plugin destroyed!
janus-gateway_1 | JANUS VoiceMail plugin destroyed!
janus-gateway_1 | Closing event handlers:
janus-gateway_1 | Bye!
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
for event in event_stream:
File "/usr/lib/python2.7/dist-packages/compose/project.py", line 399, in events
container = Container.from_id(self.client, event['id'])
File "/usr/lib/python2.7/dist-packages/compose/container.py", line 42, in from_id
return cls(client, client.inspect_container(id), has_been_inspected=True)
File "/usr/lib/python2.7/dist-packages/docker/utils/decorators.py", line 19, in wrapped
return f(self, resource_id, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/docker/api/container.py", line 756, in inspect_container
self._get(self._url("/containers/{0}/json", container)), True
File "/usr/lib/python2.7/dist-packages/docker/utils/decorators.py", line 46, in inner
return f(self, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/docker/api/client.py", line 189, in _get
return self.get(url, **self._set_request_timeout(kwargs))
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 533, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 520, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 630, in send
r = adapter.send(request, **kwargs)
ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.7/dist-packages/compose/cli/log_printer.py", line 166, in tail_container_logs
queue.put(QueueItem.new(presenter.color_func(wait_on_exit(container))))
File "/usr/lib/python2.7/dist-packages/compose/cli/log_printer.py", line 197, in wait_on_exit
exit_code = container.wait()
File "/usr/lib/python2.7/dist-packages/compose/container.py", line 243, in wait
return self.client.wait(self.id)
File "/usr/lib/python2.7/dist-packages/docker/utils/decorators.py", line 19, in wrapped
return f(self, resource_id, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/docker/api/container.py", line 1253, in wait
res = self._post(url, timeout=timeout)
File "/usr/lib/python2.7/dist-packages/docker/utils/decorators.py", line 46, in inner
return f(self, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/docker/api/client.py", line 185, in _post
return self.post(url, **self._set_request_timeout(kwargs))
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 567, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 520, in request
raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', error(104, 'Connection reset by peer'))
This is the crash log of my server:
** (stop) exited in: WebSockex.call(Janus.WS, {:text, "{\"janus\":\"keepalive\",\"session_id\":2067500296440208,\"transaction\":\"uEmRzCyRbEs\"}"})
** (EXIT) no process: the process is not alive or there's no process currently associat
ed with the given name, possibly because its application isn't started
(websockex 0.4.2) lib/websockex.ex:431: WebSockex.send_frame/2
(janus_ws 0.1.2) lib/janus_ws.ex:161: Janus.WS._send/2
(ryca 0.1.0) lib/ryca/rooms/room_server.ex:168: Ryca.Rooms.RoomServer.handle_info/2
(stdlib 3.13) gen_server.erl:680: :gen_server.try_dispatch/4
(stdlib 3.13) gen_server.erl:756: :gen_server.handle_msg/6
(stdlib 3.13) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
Last message: :keepalive
06:21:55.429 [info] Application ryca exited: shutdown
{"Kernel pid terminated",application_controller,"{application_terminated,ryca,shutdown}"}
Kernel pid terminated (application_controller) ({application_terminated,ryca,shutdown})
I doubted that this might be because the server did not send keepalive messages, but looking at the log of our server, it seems that it ended while trying to send a keepalive message, so it doesn't seem to be the problem. Looking at the log, the moment I tried to send a keepalive message, the Janus server was already shut down.
README.md states that images are based off Debian buster, while it actually should be bullseye
?
This repository provides the Dockerfile to build a full-featured docker image for the Janus WebRTC Server based on Debian buster.
Since a few days I can't get the latest ":master" Docker image running because of some missing symbols (lws_write_ws_flags).
Janus commit: 4614b6b2b43031bcde457b9bd9b65e8a364d6f52
Compiled on: Sat Sep 26 04:12:10 UTC 2020
Logger plugins folder: /usr/local/lib/janus/loggers
[WARN] Couldn't access logger plugins folder...
---------------------------------------------------
Starting Meetecho Janus (WebRTC Server) v0.10.6
[...]
Loading transport plugin 'libjanus_websockets.so'...,
[ERR] [janus.c:main:5216] Couldn't load transport plugin 'libjanus_websockets.so': /usr/local/lib/janus/transports/libjanus_websockets.so: undefined symbol: lws_write_ws_flags
I tracked it down to a change in the janus-gateway repository:
meetecho/janus-gateway@8b9549a
Is it possible that you're using an older libwebsockets that doesn't contain lws_write_ws_flags?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.