Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker push fails when a file with whitespace in its name is included in the Docker image

I'm having problems with a custom Docker image in which there are some files having some whitespaces in their names. When I execute the docker push command I have this error:

$> docker push example.azurecr.io/myimage
The push refers to repository [example.azurecr.io/myimage]
ecaa33aa3064: Pushing [==================================================>]     59MB/59MB
3f06df57be30: Pushing [==================================================>]  21.31MB/21.31MB
ca31a9af4714: Layer already exists
09eb78ab1afc: Layer already exists
62386d2295bd: Layer already exists
f7afe9869eba: Layer already exists
e2eb06d8af82: Layer already exists
svm.runProcess: command cat /tmp/d2/app/wwwroot/fonts/FranziskaWeb W03 BlackItalic.ttf failed with exit code 1

I run the Docker engine on Windows Server 2019 with the Linux containers feature enabled.

Unfortunately I'm not able to write a Dockerfile that reproduces this error.

Someone else on the Internet got this same error but I found no solution. As far as you know, does Docker have any problem with pushing images containing files with whitespaces?

like image 241
gvdm Avatar asked Sep 23 '21 13:09

gvdm


People also ask

How do I push an image into a docker repository?

To push an image to Docker Hub, you must first name your local image using your Docker Hub username and the repository name that you created through Docker Hub on the web. You can add multiple images to a repository by adding a specific :<tag> to them (for example docs/base:testing ).

Which docker command is mandatory before pushing the image?

The docker push command takes the name of the image. It will know where to push our Docker image by looking at the image name because the name contains the registry location.

Does docker push push all tags?

You can build an image with several tags and then push the image with the --all-tags option. Older Docker clients that do not support --all-tags will push all tags by default (simply omit the option), newer clients will only push latest by default. As an alternative, you may want to push each tag separately.

How do I remove a docker image?

To remove the image, you first need to list all the images to get the Image IDs, Image name and other details. By running simple command docker images -a or docker images . After that you make sure which image want to remove, to do that executing this simple command docker rmi <your-image-id> .


1 Answers

If you are not using the latest version, there is chance to update and fix it. It has been a problem, based on the comment on the code.

It seems to be fixed on 2019 February.

If you have already the latest version or you can't update it, then I fear that you are out of luck if you can't modify these specific files to not contain the whitespaces.

svm.runProcess seems to be part of LCOW image support, which is experimental and deprecated. See multiple pull-requests which removed this feature recently, and the initial one. Containers in Windows space are moving towards WSL2, however it also seems like, that now (July 2021) they are moving away from WSL support on Windows Servers, based on the GitHub comment:

"The Windows Desktop SKUs (where WSL 2 is supported) are recommended SKUs for these scenarios. For those who would like to use Linux in production scenarios in a server environment we recommend using server products such as Hyper-V VMs, and AKS on Azure Stack HCI. As always, we welcome any further Windows Server feedback through our Feedback Hub."

There is bigger issue explaining about the WSL 2 on Windows Servers, available on here.

like image 66
Niklas Avatar answered Oct 20 '22 01:10

Niklas