Docker Desktop Push of Image to Private Repo Fails

4.4k views Asked by At

I have Docker Desktop, but create my images on a Linux ARM64 machine, not the MacBook with the Docker Desktop application on it. I want to push these ARM64 images from the Linux host itself, but have run into the following problem:

When I push my image to my Docker Hub private repo with the command:

docker push myDockerHubUserName/myPrivateRepoName:tagOfImage

It fails with the error:

invalid reference format

The form of the command Docker has provided in my Docker account is described as:

Docker commands
To push a new tag to this repository,
docker push myDockerHubUserName/myPrivateRepoName:tagname

I've double-checked the values and syntax: ALL are 100% correct. But the push nonetheless fails.

How is this broken?!?!

1

There are 1 answers

0
F1Linux On BEST ANSWER

Intro:

The error:

invalid reference format

is actually a red herring that will mislead you into believing that there is a syntax error in your push command when there isn't and you'll waste your time...

Problem:

Feel free to jump to the "SOLUTION" section below if you don't care how the commands fails and just want to know how to make it execute successfully ;-)

The instructions for pushing the image that Docker provides in their user's accounts have some large & material gaps. You will waste your time- a fair bit of it- if you do not have the following context:

  1. You must login to your Docker Account before trying to push anything to it:

    docker login -u yourDockerAccountUsername
    
  2. The command Docker Hub gives you implies that the image you're trying to push was already TAGGED with the private repo as part of the tag itself.

    It just appears to be a string comprised of (3) parts:
    <dockerUserName>/<privateRepoName>:<tagname>
    It is NOT. You CANNOT merely concatenate

    "myDockerHubUserName/myPrivateRepoName"
    

    with

    "tagname"
    

    delimited with a colon! "myDockerHubUserName/myPrivateRepoName" must itself be part of the tag or the command will fail!!!

This "help" from Docker I found to be worse than giving no "help" at all because it served to create undue confusion. This is absolutely fundamental stuff and deserves better treatment.

Solution:

  1. Login to your Docker Account:

    docker login -u yourDockerAccountUsername
    
  2. Get the Image ID for the Image that you want to push:

    docker image ls
    
  3. Tag the image with your Docker Hub User ID, Docker Hub Repo Name AND Image Name:

    docker tag ae1b95b73ef7 myDockerHubUserName/myPrivateRepoName:myImageName
    
  4. Push the Image:

    docker push myDockerHubUserName/myPrivateRepoName:myImageName
    

    Note the COLON separating the repo & image name: I've seen this described as a forward slash in other answers but I found a colon is required for the command to succeed.

Conclusion:

This was a big and unnecessary time-waster that sent me down the rabbit hole. Hopefully this answer will save others wasted time.

Attribution:

This answer was actually pieced together from several different Stack questions which got me across the finish line. Kudos to Abhishek Dasgupta for the general procedure & kudos to Илья Хоришко for the form of the tag which worked in the end. You folks are stars!