-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
Description
Dotnet applications running in docker containers on arm64 stop responding when unhandled exception occurs and keep a 100% utilization on a single CPU core (as measured by docker stats).
I tested the issue on the following environments:
- Jetson Xavier NX Developer Kit
- M1 MacBook
- Windows/WSL with qemu emulation of arm64 (default emulation setup by docker desktop)
The only difference in the environments is that with qemu an additional line is present in the output and shell stops responding to Ctrl+C signals:
qemu: uncaught target signal 6 (Aborted) - core dumped
Issue is only present when the dotnet process is set as docker entrypoint e.g. ENTRYPOINT [ "dotnet", "arm-dotnet-repro.dll" ]
Issue is NOT present when running the dotnet binaries natively outside of docker containers, directly on the host.
Issue is NOT present when wrapping the entrypoint with shell script (see reproduction repo).
Issue is NOT present when the dotnet binary is exectued via interactive shell in docker container e.g. docker run --rm -it --entrypoint bash ex-repro:arm64-1 and then inside the container shell call dotnet arm-dotnet-repro.dll
The behavior is present on dotnet 5 and dotnet 6 runtimes (I just tested these ones).
Reproduction Steps
see https://github.com/blaskoa/arm-dotnet-repro for minimal reproducer with some available workarounds I found
Expected behavior
On unhandled exception the container should exit with non-0 exit code.
Basically the same as it behaves on x64
Actual behavior
On unhandled exception the container keeps "running" and utilizes 1 CPU core to 100%
Regression?
No response
Known Workarounds
- Using a shell script as an entrypoint in docker container
- Using a global exception handler
see https://github.com/blaskoa/arm-dotnet-repro
some of the workarounds have some side effects which might render them unsuitable
Configuration
No response
Other information
No response