runtime: [ARM32] `qemu: Unsupported syscall: 389` when running console app in Docker
While testing the new arm32v7 Docker images for .NET Core I’m seeing qemu: Unsupported syscall: 389
written to the output whenever I run a console application in an arm Docker container on a Windows 10 machine. I don’t see this if I run the same Docker image on a physical arm32 device (e.g. raspberry pi).
Steps to reproduce
- From a Windows 10 machine with Docker installed (Docker version 17.06.0-ce, build 02c1d87)
- Create a new console app -
dotnet new console
- Add the following Dockerfile to your project
FROM microsoft/dotnet-nightly:2.0-sdk AS build-env
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# build runtime image
FROM msimons/dotnet-nightly:2-runtime-stretch-arm32v7
WORKDIR /app
COPY --from=build-env /app/out ./
ENTRYPOINT ["dotnet", "arm.dll"]
Note: The Dockerfile for msimons/dotnet-nightly:2-runtime-stretch-arm32v7 is contained in https://github.com/dotnet/dotnet-docker-nightly/pull/328
3. Run the following from your project dir docker build -t armapp .
4. Run the image docker run --rm armapp
Expected Output of App
Hello World!
Output of App
qemu: Unsupported syscall: 389
Hello World!
Notes
- The app’s return code is 0
- I tried running the image with the
--privileged
and--security-opt="seccomp=unconfined"
options but see no difference in behavior.
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Comments: 21 (11 by maintainers)
Any news?
Also seeing this issue on OSX 10.13.6 using image
microsoft/dotnet:2.1-sdk-stretch-arm32v7
on stepRUN dotnet restore -nowarn:msb3202,nu1503 -p:RestoreUseSkipNonexistentTargets=false
. It gives the following output:@jkotas So, what you are saying is to build within x86/x64 container, target linux_arm and just copy published files to correct arm based image? That should work, thanks.
@janvorli - I am seeing a more severe variant of this with the new ARM SDK builds.
Steps to reproduce
docker build -t dotnet-arm-sdk .
Results:
You can also reproduce this on Linux when using qemu but the setup is more complex.
As @okodron suggested, try upgrading to latest qemu that should have the syscall implemented.
We do not test or support .NET Core on qemu. We have tried using qemu to run tests in CI for a while, but we have found quemu to be too unstable for what .NET Core needs.
If you are using docker just for building, .NET Core 3.1 tooling supports cross-compilation that allows
dotnet publish
linux arm32 binaries from linux x64.Also seeing this issue for
microsoft/dotnet:2.1.500-sdk-bionic-arm32v7
+microsoft/dotnet:2.1.500-sdk-stretch-arm32v7
Error :
Extra info: