Since the web_only container upgraded successfully, and despite the data container failing to bootstrap, I ran ./launcher start data and the existing container started; reloading the admin page showed the new version instead.
I’m still curious about this bug since it may affect future upgrades that would require database migrations.