The build fails because Boost is unpacked into /boost/boost_1_92_0 and /boost is also Boost.Build's own top-level project id. The fix: Don't unpack/build Boost under a directory literally named /boost. In build-boost-llvm, change the working dir, e.g.: mkdir /opt/boost-src # instead of mkdir /boost cd /opt/boost-src and update the second-stage COPY in the Dockerfile accordingly (/boost/boost_1_92_0 → e.g. /opt/boost-src/boost_1_92_0). Any top-level path that isn't boost works (/opt, /usr/src, /build, /root/...). That single change makes the configuration checks resolve. """ "It's debatable whether b2 should be expected to catch this — rooted ids are meant to be a location-independent namespace, so a path colliding with one is arguably user error — but silently producing a doubled, non-existent path is a bad failure mode, and either a clearer diagnostic from b2 or a non-absolute reference from config.jam would prevent it."