401 Unauthorized when using jib to create docker image

Viewed 1378

I am on windows and this is the plugin configuration:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>3.2.1</version>
    <configuration>
        <container>
            <ports>
                <port>8080</port>
            </ports>
            <format>OCI</format>
        </container>
    </configuration>
</plugin>

This is the command I run:

.\mvnw clean install jib:dockerBuild -Dimage=fullstack:v1

This is the error I keep getting no matter what I do:

[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:3.2.1:dockerBuild (default-cli) on project SpringBootFullStack: Build
 to Docker daemon failed, perhaps you should make sure your credentials for 'registry-1.docker.io/library/eclipse-temurin' are set up correc
tly. See https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#what-should-i-do-when-the-registry-responds-with-unauthorized f
or help: Unauthorized for registry-1.docker.io/library/eclipse-temurin: 401 Unauthorized
[ERROR] {"details":"incorrect username or password"}
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

How should I go about it? I've read the documentation on jib github repo on authenticating but I don't really understand how to procede and feel overwhelmed

UPDATE

I ran docker login and I get:

Authenticating with existing credentials...
Login Succeeded

but the error persists (and I figured I didn't include some part of the logging maybe:

[INFO] Using credentials from Docker config (C:\Users\david\.docker\config.json) for openjdk:17
[INFO] Executing tasks:                               
[INFO] [============                  ] 40.0% complete
[INFO] > building image to Docker daemon              
[INFO]                                                
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.964 s
[INFO] Finished at: 2022-05-17T19:39:12+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:3.2.1:dockerBuild (default-cli) on project SpringBootFullStack: Build
 to Docker daemon failed, perhaps you should make sure your credentials for 'registry-1.docker.io/library/openjdk' are set up correctly. See
 Unauthorized for registry-1.docker.io/library/openjdk: 401 Unauthorized
[ERROR] {"details":"incorrect username or password"}
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

UPDATE 2

this is also the content of the file logs refer to in order to get username and password:

{
    "auths": {
        "https://index.docker.io/v1/": {}
    },
    "credsStore": "desktop"
}

UPDATE 3

After two days of trying I decided to look for something else that would do the same job: https://spring.io/guides/gs/spring-boot-docker/ And with this the job was done in ~10 minutes. Life really is crazy

5 Answers
{"details":"incorrect username or password"}

The response from the server is clear. Credentials were given to the server, and it says they are wrong.

Indeed, Jib did retrieve some (probably non-working) credentials from the Docker config.json file:

[INFO] Using credentials from Docker config (C:\Users\david\.docker\config.json) for openjdk:17

Try emptying config.json entirely or just delete the file. Particularly, remove the entry for "https://index.docker.io/v1/" and credsStore.

Probably the same kind of issue to this Stack Overflow question. Also take a look at this GitHub issue on the Jib repo.

Just delete the credsStore property from the docker-config file. You will find the config.json at your user-home dir.

the path is: $USER/.docker/config.json and suppose the file contains the followings,

{
  "auths": {
    "https://index.docker.io/v1/": {}
  },
  "credsStore": "desktop"
}

and now delete the line : "credsStore": "desktop"

So, the file will now contain the following

{
  "auths": {
    "https://index.docker.io/v1/": {}
  }
}

I had the same issue on Mac. And I found 2 ways how to solve it:

  1. To do this, you can use the jib config:
<configuration>
  ...
  <from>
    <image>aws_account_id.dkr.ecr.region.amazonaws.com/my-base-image</image>
    <auth>
      <username>my_username</username>
      <password>my_password</password>
    </auth>
  </from>
  <to>
    <image>gcr.io/my-gcp-project/my-app</image>
    <auth>
      <username>${env.REGISTRY_USERNAME}</username>
      <password>${env.REGISTRY_PASSWORD}</password>
    </auth>
  </to>
  ...
</configuration>

https://github.com/GoogleContainerTools/jib/blob/master/jib-maven-plugin/README.md#auth-object

  1. The second way is not about Windows, i fixed this issue on Mac OS but you can try to use my experience. I figured that it's strange if we're getting 401 unauthorized the most likely Jib trying to login with some wrong credentials. In my case i found 2 rows in Keychain Access:
  • The first (wrong) with email in password (instead real password))
  • The second (correct) with real password Jib tried to use first. The problem was solved after deleting the first value. In windows case you can try to use Credential Manager or find some another credentials storage.

Additionally. While i was researching it i found recommendations to change:

 "credsStore": "desktop" -> "credStore": "desktop"

But it didn't work for me.

If you don't want to go the extra credentials configuration step, pass them when running mvn package as below:

mvn package -D jib.to.auth.username="yourdockerUsername" -Djib.to.auth.password="yourDockerPassword"

It will build and push to docker Hub as required.

Related