Problem Description
We're experiencing device connectivity issues when running DepthAI v3 inside containers. The same hardware works with our legacy v2 pipeline, but fails consistently with v3 in containerized environments.
MRE
class OakD_Camera:
def __init__(self):
# Device / Pipeline handles
self.pipeline: Optional[dai.Pipeline] = None
self.device: Optional[dai.Device] = None
self._init()
def _init(self) -> None:
# Create pipeline first (container-safe pattern)
p = dai.Pipeline()
#####################
### PIPELINE CODE ###
#####################
p.start()
self.pipeline = p
When I run my application locally, the pipeline runs without error. However, when I run the container version, it is unable to establish a connection with the camera even though the device is visible on the USB bus:
$ lsusb | grep 03e7
Bus 001 Device 056: ID 03e7:2485 Intel Movidius MyriadX
Below are the full logs:
DepthAI Logs
[2025-09-07 04:50:22.118] [depthai] [info] Environment variable DEPTHAI_INSTALL_SIGNAL_HANDLER is not set. Using default value: ''
[2025-09-07 04:50:22.119] [depthai] [info] Environment variable DEPTHAI_LIBUSB_ANDROID_JAVAVM is not set. Using default value: ''
[2025-09-07 04:50:22.119] [depthai] [debug] Python bindings - version: 3.0.0-rc.4 from build: 2025-07-31 19:38:25 +0000
[2025-09-07 04:50:22.119] [depthai] [debug] Library information - version: 3.0.0-rc.4, commit: from , build: 2025-07-31 19:38:25 +0000, libusb enabled: true
[2025-09-07 04:50:22.141] [depthai] [info] Environment variable DEPTHAI_PROFILING is not set. Using default value: ''
[2025-09-07 04:50:22.141] [depthai] [info] Environment variable XLINK_LEVEL is not set. Using default value: ''
[2025-09-07 04:50:22.141] [depthai] [debug] Initialize - finished
Setting up json logging
{"asctime": "2025-09-07 04:50:22,195", "levelname": "INFO", "name": "server", "message": "Starting ec-oakd-service v0.1.0"}
[2025-09-07 04:50:22.340] [depthai] [debug] Resources - Archive 'depthai-bootloader-fwp-0.0.28.tar.xz' open: 4ms, archive read: 215ms
{"asctime": "2025-09-07 04:50:22,718", "levelname": "DEBUG", "name": "asyncio", "message": "Using selector: EpollSelector"}
INFO: Started server process [1]
{"asctime": "2025-09-07 04:50:22,761", "levelname": "INFO", "name": "uvicorn.error", "message": "Started server process [1]", "color_message": "Started server process [\u001b[36m%d\u001b[0m]"}
INFO: Waiting for application startup.
{"asctime": "2025-09-07 04:50:22,762", "levelname": "INFO", "name": "uvicorn.error", "message": "Waiting for application startup."}
{"asctime": "2025-09-07 04:50:22,763", "levelname": "INFO", "name": "ec_oakd_camera", "message": "Using USB speed UsbSpeed.HIGH for type usb2"}
[2025-09-07 04:50:22.764] [depthai] [info] Environment variable DEPTHAI_SEARCH_TIMEOUT is not set. Using default value: ''
[2025-09-07 04:50:22.764] [depthai] [info] Environment variable DEPTHAI_PROTOCOL is not set. Using default value: ''
[2025-09-07 04:50:22.764] [depthai] [info] Environment variable DEPTHAI_PLATFORM is not set. Using default value: ''
[2025-09-07 04:50:22.916] [depthai] [info] Environment variable DEPTHAI_DEVICE_MXID_LIST is not set. Using default value: ''
[2025-09-07 04:50:22.916] [depthai] [info] Environment variable DEPTHAI_DEVICE_ID_LIST is not set. Using default value: ''
[2025-09-07 04:50:22.916] [depthai] [info] Environment variable DEPTHAI_DEVICE_NAME_LIST is not set. Using default value: ''
[2025-09-07 04:50:22.916] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:23.401] [depthai] [debug] Resources - Archive 'depthai-device-fwp-fef7dc0beab3e77bb7f4a38823c968388c1c5eb9.tar.xz' open: 5ms, archive read: 1276ms
[2025-09-07 04:50:23.624] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:24.332] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:25.036] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:25.740] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:26.444] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:27.156] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:27.860] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:28.564] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:29.268] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:29.976] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:30.680] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:31.384] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:32.088] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:32.792] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:32.892] [depthai] [warning] Skipping X_LINK_UNBOOTED device with name "1.2" ()
[2025-09-07 04:50:34.000] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:34.000] [depthai] [warning] skipping X_LINK_UNBOOTED device having name "1.2"
[2025-09-07 04:50:34.000] [depthai] [info] Adding device to the filtered list: DeviceInfo(name=1.2, deviceId=, X_LINK_UNBOOTED, X_LINK_USB_VSC, X_LINK_MYRIAD_X, X_LINK_ERROR)
[2025-09-07 04:50:34.000] [depthai] [warning] skipping X_LINK_UNBOOTED device having name "1.2"
ERROR: Traceback (most recent call last):
File "/opt/service/.venv/lib/python3.11/site-packages/starlette/routing.py", line 694, in lifespan
async with self.lifespan_context(app) as maybe_state:
File "/usr/local/lib/python3.11/contextlib.py", line 210, in __aenter__
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/service/app/server.py", line 73, in app_lifespan
app.init_camera()
File "/opt/service/app/server.py", line 32, in init_camera
self._oakd_camera = OakD_Camera()
^^^^^^^^^^^^^
File "/opt/service/app/camera/oakd_camera.py", line 49, in __init__
self._init()
File "/opt/service/app/camera/oakd_camera.py", line 58, in _init
p = dai.Pipeline()
^^^^^^^^^^^^^^
RuntimeError: No available devices
{"asctime": "2025-09-07 04:50:34,008", "levelname": "ERROR", "name": "uvicorn.error", "message": "Traceback (most recent call last):\n File \"/opt/service/.venv/lib/python3.11/site-packages/starlette/routing.py\", line 694, in lifespan\n async with self.lifespan_context(app) as maybe_state:\n File \"/usr/local/lib/python3.11/contextlib.py\", line 210, in __aenter__\n return await anext(self.gen)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/service/app/server.py\", line 73, in app_lifespan\n app.init_camera()\n File \"/opt/service/app/server.py\", line 32, in init_camera\n self._oakd_camera = OakD_Camera()\n ^^^^^^^^^^^^^\n File \"/opt/service/app/camera/oakd_camera.py\", line 49, in __init__\n self._init()\n File \"/opt/service/app/camera/oakd_camera.py\", line 58, in _init\n p = dai.Pipeline()\n ^^^^^^^^^^^^^^\nRuntimeError: No available devices\n"}
ERROR: Application startup failed. Exiting.
{"asctime": "2025-09-07 04:50:34,011", "levelname": "ERROR", "name": "uvicorn.error", "message": "Application startup failed. Exiting."}
Questions
Are there known containerization issues with DepthAI v3.0.0-rc.4?
Have USB device access patterns changed between v2 and v3 that affect containers?