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=