The tag you are referencing is known as a manifest tag (also "multi-platform" or "multi-arch" tag). That's a special tag that can be defined which the Docker client will dynamically resolve to an underlying image that matches the platform of your Docker host. So you can use the same tag on a Linux machine with an ARM processor and Docker will attempt to resolve that tag to an image intended for the Linux ARM platform.
In your case, you're running this on Windows. Windows has specific requirements around compatibility between the Windows version of the Docker host and Docker container. These requirements are published here: https://docs.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility. The Docker client handles this by attempting to resolve the tag to an image that matches your Windows host version. Your Windows build version is 10.0.17134
which is version 1803. That version went end-of-life (EOL) last November so you should probably get that updated. Because it's EOL, the 3.1
tag had been updated to no longer provide an image that's compatible with 1803. And this is why Docker gives you that error. It's not able to resolve the manifest tag to an underlying image that matches your host version because there is no associated image.
If you really wanted this to work, you could use the 3.1-nanoserver-1803
tag instead of 3.1
. That tag is platform-specific and not a manifest tag. So Docker doesn't do any resolving like it does with a manifest tag; it just pulls the image directly. But it's not recommended to use that tag because that image hasn't been serviced (1803 is EOL, remember). What you should really be doing is upgrading your host OS to a supported version.