Running DTrace in container

[email protected] Mon, 30 Mar 2026 11:27:21 +0200
Newsgroups dev.linux.lists.dtrace
Message-ID <[email protected]>
Hi, I'm trying to run DTrace inside a Docker container but I get an =
error from one of the bundled DTrace files:

$ docker run -it --rm --privileged dtrace
root@b72fbbee0b66:/dtrace# dtrace -n 'syscall::openat:entry /pid =3D=3D =
$target/ { trace(copyinstr(arg1)); } ' -c 'cat README'
dtrace: invalid probe specifier syscall::*open*:entry /pid =3D=3D =
$target/ { trace(copyinstr(arg1)); } : =
"/usr/lib64/dtrace/6.10/procfs.d", line 131: operator -> cannot be =
applied to pointer to type "void"; must be applied to a struct or union =
pointer

I'm using Docker through OrbStack on macOS ARM64 (so this is running =
Linux AArch64). The Linux kernel that OrbStack is using is 6.17.8:

$ docker run dtrace uname -r                                             =
                                                                         =
 =20
6.17.8-orbstack-00308-g8f9c941121b1

When building DTrace I've based my Docker image on Ubuntu 25.10, which =
uses the 6.17.0 kernel by default. See the exact Dockerfile I've used to =
build DTrace at the end of this message. I've also tried to build and =
run DTrace without Docker in a virtual machine using QEMU running Ubuntu =
25.10. Then DTrace is working fine in the virtual machine.

Have I made some mistake when building DTrace or is it not expected to =
be able to run DTrace inside a container? Or is DTrace not compatible =
with this particular version of the Linux kernel?

Dockerfile:

FROM ubuntu:25.10

ARG KERNEL_VERSION=3D6.17.8
ARG KERNEL_MAJOR=3D6

RUN apt update && apt install -y\
  libc6-dev \
  bison \
  flex \
  gcc-bpf \
  binutils-bpf \
  libpcap-dev \
  wireshark \
  valgrind \
  libfuse3-dev \
  \
  libelf-dev \
  make \
  binutils-dev \
  libpfm4-dev \
  libbpf-dev \
  gawk \
  \
  curl \
  xz-utils && \
  ln -s /usr/include/ctf-api.h /usr/include/sys/ctf_api.h

RUN \
  kernel_version=3D$(uname -r | cut -f 1 -d - | cut -f 1 -d +) && \
  kernel_major=3D$(echo $kernel_version | cut -f 1 -d .) && \
  curl -L =
"https://cdn.kernel.org/pub/linux/kernel/v$kernel_major.x/linux-$kernel_ve=
rsion.tar.xz" -o "linux-$kernel_version.tar.xz" && \
  tar xf "linux-$kernel_version.tar.xz" && \
  cd "linux-$kernel_version" && \
  make mrproper

RUN \
  curl -L =
https://github.com/oracle/dtrace/archive/refs/heads/devel.tar.gz -o =
dtrace.tar.gz && \
  mkdir dtrace && \
  tar -x -f dtrace.tar.gz -C dtrace --strip-components=3D1

RUN \
  kernel_version=3D$(uname -r | cut -f 1 -d - | cut -f 1 -d +) && \
  kernel_major=3D$(echo $kernel_version | cut -f 1 -d .) && \
  cd dtrace && \
  ./configure \
    --kernels=3D"$kernel_version" \
    --kernel-mod-dir=3D"../linux-$kernel_version/" \
    --kernel-src-dir=3D../linux-$kernel_version/ \
    --kernel-src-suffix=3D"" \
    --kernel-obj-suffix=3D"build" && \
  make BPFC=3Dbpf-gcc BPFLD=3Dbpf-ld && \
  make install && \
  mv /usr/lib64/libdtrace.so* /lib/aarch64-linux-gnu/

--
/Jacob Carlborg=