Getting stuck on MEETING_STATUS_CONNECTING when build docker image

Hey there

I’m working on a bot that builds off of the headless Linux sample. It runs perfectly when launched with the included Docker Compose file. However, now that I’m building it to build an image and run that, I’m encountering an issue with docker run. Specifically, when I start the bot this way, it joins the meeting but gets stuck at MEETING_STATUS_CONNECTING, with no further events coming in.

There are no SDK errors or anything, the bot even joins the meeting, but I am not getting any other events from Zoom after the connecting status change (It should get the in-meeting status after joining). I have also tried to send it messages, which should also get registered, but it still does not work. Interestingly, if I end the meeting while the bot is still connected, it actually receives the disconnect and end events.

To build the image I am using:
docker build --tag TAG .
and to run image:
docker run IMAGE

Here are the full logs:

Consolidate compiler generated dependencies of target zoomsdk
[  9%] Building CXX object CMakeFiles/zoomsdk.dir/src/main.cpp.o
[ 18%] Building CXX object CMakeFiles/zoomsdk.dir/src/Zoom.cpp.o
[ 27%] Building CXX object CMakeFiles/zoomsdk.dir/src/Config.cpp.o
[ 36%] Linking CXX executable zoomsdk
[100%] Built target zoomsdk
INFO:root:Initializing bot...
INFO:root:Joining meeting with URL: https://us05web.zoom.us/j/88177075948?pwd=2TrM0wyHY4gdsbfaiia2nah4jnckl5.1
INFO:root:Server waiting for connections...
INFO:root:Client connected
INFO:root:ZOOM_OUT: ✅ configure
INFO:root:ZOOM_OUT: ✅ initialize
INFO:root:ZOOM_OUT: ✅ join a meeting
INFO:root:New Meeting status: MEETING_STATUS_CONNECTING (1)
INFO:root:ZOOM_OUT: Meeting Status MEETING_STATUS_CONNECTING
INFO:root:Connecting to meeting after idle
INFO:root:ZOOM_OUT: ⏳ connecting to the meeting

The ones with ZOOM_OUT are the ones directly from the headless Linux sample. I have built a Python app that runs it and manages all of the bot logic. I am not using the raw audio recording but instead the Meeting Chat Events. I should note that nothing comes after the last log above, it just freezes. The bot joins the meeting, but it does not receive any events from Zoom. I am not sure which version of the SDK I am using, but I think it is the one from around April this year. I have tried to update it, but that just broke it. I can give it another shot if you think that might have something to do with it.

Here are the logs from when I end the meeting:

INFO:root:ZOOM_OUT: Meeting Status MEETING_STATUS_DISCONNECTING
INFO:root:New Meeting status: MEETING_STATUS_DISCONNECTING (4)
INFO:root:ZOOM_OUT: ⏳ disconnecting from the meeting
INFO:root:ZOOM_OUT: Meeting Status MEETING_STATUS_ENDED
INFO:root:New Meeting status: MEETING_STATUS_ENDED (7)
INFO:root:ZOOM_OUT: ✅ meeting ended
INFO:root:ZOOM_OUT: ⏳ Meeting End
INFO:root:Connection closed, initiating shutdown
INFO:root:Cleaning up resources
INFO:root:Main process exiting

I am not quite sure what version of the Linux SDK I am currently using, but I’m using a fork of the meetingsdk-headless-linux-sample Github from the end of March 2024.

There is nothing between the previous logs and these. I am not sure what exactly to log to help debug this issue, any guidance would be much appreciated.

Thank you,
Noah

Hey @noahviktorschenk,

It’s hard to say what the specific issue is without seeing your code, but based on your description of the issue here I’ll try to provide some pointers below.

Since you’re unsure which SDK version you’re using, it might be related a version mismatch. Zoom SDKs can sometimes change behavior across updates so it might be worth upgrading to the latest version (even if it broke before) and ensuring your Docker image has all the necessary dependencies installed for that version.

Another possibility is that it’s related to a docker environment difference. The docker run environment might be missing something that docker-compose provides. You might want to check your docker-compose.yml for any specific network configurations, environment variables, or volume mounts that aren’t included in your docker run command.

One last debugging tip is to add more logging - specifically around the join method and any code slightly up/downstream of the call.

If you didn’t want to build this bot yourself, an alternative would be to use recall.ai. It’s a simple 3rd party meeting bot API that makes it easy to spin up bots and send and receive meeting data including chat messages and media streams.

Let me know if you have questions!

Hay Amanda,

Thank you so much for the reply.

I have also previously suspected a difference in the docker environment, but I have not been able to confirm it yet.

Here is my compose.yaml file:

services:
  dora: &dora
    build: ./
    platform: linux/amd64
    volumes:
     - .:/tmp/meeting-sdk-linux-sample
    ports:
     - "80:80"

And my current Dockerfile:

FROM --platform=linux/amd64 ubuntu:22.04 AS base
ENV project=meeting-sdk-linux-sample
ENV cwd=/tmp/$project

#  Install Dependencies
RUN apt-get update  \
    && apt-get install -y \
    apt-utils\
    build-essential \
    ca-certificates \
    cmake \
    curl \
    gdb \
    git \
    libdbus-1-3 \
    libgbm1 \
    libgl1-mesa-glx \
    libglib2.0-0 \
    libglib2.0-dev \
    libssl-dev \
    libx11-xcb1 \
    libxcb-image0 \
    libxcb-keysyms1 \
    libxcb-randr0 \
    libxcb-shape0 \
    libxcb-shm0 \
    libxcb-xfixes0 \
    libxcb-xtest0 \
    libxfixes3 \
    pkgconf \
    tar \
    unzip \
    zip  \  
    python3 \
    python3-pip
    

# Install ALSA
#RUN apt-get install -y libasound2 libasound2-plugins alsa alsa-utils alsa-oss

# Install Pulseaudio
#RUN apt-get install -y  pulseaudio pulseaudio-utils

## Install Tini
ENV TINI_VERSION=v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini

FROM base AS deps

WORKDIR /opt
RUN git clone --depth 1 https://github.com/Microsoft/vcpkg.git \
     && ./vcpkg/bootstrap-vcpkg.sh -disableMetrics \
     && ln -s /opt/vcpkg/vcpkg /usr/local/bin/vcpkg \
     && vcpkg install vcpkg-cmake



FROM deps AS build

WORKDIR $cwd

COPY . .

RUN mkdir -p build

COPY ./bin/entry.sh /bin/
RUN chmod +x /bin/entry.sh

EXPOSE 80
ENTRYPOINT ["/tini", "--"]
CMD ["/bin/entry.sh"]

Currently, I have just run it with docker run IMAGE. I am not quite sure what the difference would be. I have also tried to run docker run --network=host --ipc=host IMAGE and the same issue still persists. I have also tried to periodically manually retrieve the meeting status to see if it was the onMeetingStatus events that weren’t being called, but the meeting status was just MEETING_STATUS_CONNECTING.

I will try to upgrade to the newest version of the SDK, but there are quite a few issues I will have to fix.

I would greatly appreciate any insights you can give me!

When I first deployed GitHub - noah-duncan/attendee: Meeting Bots made easy on Heroku, I saw the same behavior. It was using Heroku’s default python environment.

Then I switched to having Heroku deploy this docker file and it started working. Not sure what the root cause was.

You might want to first make sure that you can get the headless linux sample under the latest sdk version to run, just to confirm that you can get something to a working state. Then start modifying the headless linux sample to use your code and see at what point it stops working.

If headless linux sample + current SDK works but headless linux sample + outdated SDK exhibits the same issue you’re seeing then it’s likely the SDK version.