Docker build and UilttiuyVM: The parameter is incorrect - Failed to regis error

The following error can occur when doing a Docker build.

Docker image

Docker . failed to register layer: re-exec error: exit status 1: output: processUtilityWImage

\\?\C:\ProgramData\docker\windowsfilter \UtilityVM: The parameter is incorrect.

At line: 2 char: 1

+ Docker build - -tag tw/gp2018 .

+ CategoryInfo :NotSpecified: (failed to regis…r is incorrect.:String) []. Remote Exception

+FullyQualifiedErrorId : NativeCommnadError

 

On a windows build, this is often due to the base image not being compatible with operating system of the Docker host machine.

For example, I moved my dockerfile and build directory from Windows 10 to Windows Server 2016 and experienced this error.

Turns out that the windowscore I was attempting to use was not compatible.

See here https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility for the guide on the windows container versions compatible with different hosts.

dockercompat

I was attempting to use microsoft/windowsservercore:1803, but the only version that is compatible on Server 2016, from the above table, without using Hyper-V isolation (where a small Linux machine is used to host container), is build 14393.

Thus in my dockerfile, changing the base image instruction to

FROM microsoft/windowsservercore:ltsc2016

solved the above error on the server host.

The reason is obvious really, Docker works by sharing the underlying kernel from the host with the containers, overlaying layers of files until you reach the image. Changes to the host operating system will adversely affect this layering, as expected components may not be present that were there when the image was created. The container my start but fail later.

Using Hyper-V isolation works, as the Hyper-V isolation introduces its own kernel instead of the host’s thus isolating the container from the host operating system. This still gives us benefits if multiple containers are ran, and the benefits of portability are still present, but less efficient on disk storage. Use the switch parameter –isolation=hyperv to enable this isolation.

Installing Docker onto Windows Server 2016

 

https://docs.docker.com/install/windows/docker-ee/

Docker comes in two editions, free community edition and enterprise edition.

The company Docker and Microsoft entered into a commercial agreement to bring Docker to windows server as a commercially supported container enterprise product.

Docker running containers on Windows is the result of a two-year collaboration between Microsoft that involved the Windows kernel growing containerization primitives, Docker and Microsoft collaborating on porting the Docker Engine and CLI to Windows to take advantage of those new primitives and Docker adding multi-arch image support to Docker Hub. (https://blog.docker.com/2016/09/dockerforws2016/)

 

 

As a result of the agreement Docker Enterprise is already licenced as part of Windows Server 2016. So you just need to install and use it!

 

There are two types of containers, Linux and Windows. To run Windows OS containers, you must install the windows provider. Choose the appropriate container type below and issue the relevant commands.

For Install for Windows containers:

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

Install-Package -Name docker -ProviderName DockerMsftProvider

For Install for Linux Containers:

Install-Module DockerProvider –Force

Install-Package Docker -ProviderName DockerProvider –Force

 

When installed there will be a Docker Service on the machine:

Docker Service

When the command has finished executing (can take some time), then powershell should be aware of Docker commands. Thus issuing the following command:

Docker version

will return information about the Docker version.

Docker Version

 

Uninstall docker from Windows Server 2016

Uninstall-Module dockerprovider

Uninstall-package docker

or for windows container:

Uninstall-Module DockerMsftProvider

Uninstall-package docker

Dynamics GP 2018 wrong version of GP2018 Power Shell included

Be aware of an issue with the GP2018 installation media

GP2018 Power Shell Additional Product is version 2016

You can see above that the installation media MDGP2018_RTM_DVD_ENUS has under the Additional Products the GP2016 installer for Power Shell.

The correct installer has been provided by Microsoft under Customer Source here: https://mbs.microsoft.com/customersource/northamerica/GP/downloads/service-packs/mdgp2018_dexterityreleases

It is not obvious that a administration module should be under something as specific as Dexterity Development System – buy hey at least it IS available!


Dynamics GP 2018 Power Shell installer found under Dexterity Development System Releases for Dynamics GP 2018

Printing to multiple UPS label printers (from Dynamics GP)

This is a quick note to self:

When an order is fulfilled it is routed electronically to the appropriate carrier depending on nature of the consignment.

The various carriers we use then print the thermal shipping label directly to the warehouse packing bench that is fulfilling that order. With one central thermal label printer an many benches, it is both ergonomically inefficient and too error prone (wrong labels get on wrong parcels).

 

UPS world ship

UPS Worldship allows printers to be defined and named within the world ship software. The printer can be one that is a network printer or a shared printer from another machine.

Each warehouse packing bench has a shared (or network) printer placed on it. Each of these printers is set up in WorldShip with the bench name (BENCH1..2…3..)

The GP fulfilment then sends that printer name of the bench that machine is on, within the XML for the despatch. The Worldship auto XML import picks up that printer name. That ensures that when the shipment is processed, the labels are routed to the originating warehouse packing bench thermal printer.

Drivers

UPS use a bespoke driver for the Zebra thermal printers. In fact they even have their own badged version of the Zebra printers with UPS firmware on. This lets them get the fonts and layout of their label correct, so if using a non-UPS Zebra thermal printer you must install the UPS drivers on the machine and go into the printer settings and replace the stock driver with the UPS one. This works even for old DA402 up to the more modern GK series printers.

If you are putting your own logo on the UPS labels by using the custom label templates within Worldship, and thus are using the extended size label stock, you must also ensure that you use the zebra printer media calibration, found in the printer settings tools section to calibrate the printer stock size.

 

Thus we can now fulfil orders on many warehouse packing benches with one Worldship instance and thermal labels will print on the correct bench’s thermal printer.