Issue Encountered

When running ahoy up I got the following error (see screenshot example):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
> ahoy up
  [+] Running 1/1
   ! cli Warning pull access denied for govcms-project-name, repository does not exist or may require 'docker login': denied: requested access to the resourc...              4.3s
  [+] Building 2.5s (18/18) FINISHED
   => [internal] load local bake definitions                                                                                                                     0.0s
   => => reading from stdin 2.44kB                                                                                                                               0.0s
   => [cli internal] load build definition from Dockerfile.cli                                                                                                   0.0s
   => => transferring dockerfile: 439B                                                                                                                           0.0s
   => [php internal] load build definition from Dockerfile.php                                                                                                   0.0s
   => => transferring dockerfile: 244B                                                                                                                           0.0s
   => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 8)                                                                                 0.0s
   => WARN: InvalidDefaultArgInFrom: Default value for ARG ${CLI_IMAGE} results in empty or invalid base image name (line 8)                                     0.0s
   => [test internal] load build definition from Dockerfile.test                                                                                                 0.0s
   => => transferring dockerfile: 286B                                                                                                                           0.0s
   => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 8)                                                                                 0.0s
   => WARN: InvalidDefaultArgInFrom: Default value for ARG ${CLI_IMAGE} results in empty or invalid base image name (line 8)                                     0.0s
   => [nginx internal] load build definition from Dockerfile.nginx-drupal                                                                                        0.0s
   => => transferring dockerfile: 347B                                                                                                                           0.0s
   => WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 8)                                                                                 0.0s
   => WARN: InvalidDefaultArgInFrom: Default value for ARG ${CLI_IMAGE} results in empty or invalid base image name (line 8)                                     0.0s
   => [cli internal] load metadata for docker.io/govcms/govcms:10.x-latest                                                                                       1.1s
   => [php internal] load metadata for docker.io/govcms/php:10.x-latest                                                                                          1.0s
   => ERROR [nginx internal] load metadata for docker.io/library/govcms-project-name:latest                                                                                   2.3s
   => [nginx internal] load metadata for docker.io/govcms/nginx-drupal:10.x-latest                                                                               1.1s
   => [test internal] load metadata for docker.io/govcms/test:10.x-latest                                                                                        1.1s
   => [cli internal] load .dockerignore                                                                                                                          0.0s
   => => transferring context: 231B                                                                                                                              0.0s
   => CACHED [cli 1/4] FROM docker.io/govcms/govcms:10.x-latest@sha256:5d87738ba91-LoremIpsumDolorSitAmetConsectet                          0.0s
   => [cli internal] load build context                                                                                                                          0.0s
   => => transferring context: 109.49kB                                                                                                                          0.0s
   => [cli 2/4] COPY themes/ /app/web/themes/custom                                                                                                              0.1s
   => [cli 3/4] COPY config /app/config                                                                                                                          0.0s
   => [cli 4/4] COPY favicon.ico /app/web                                                                                                                        0.0s
   => [cli] exporting to image                                                                                                                                   0.1s
   => => exporting layers                                                                                                                                        0.0s
   => => writing image sha256:5d87738ba91-LoremIpsumDolorSitAmetConsectet                                                                   0.0s
   => => naming to docker.io/library/govcms-project-name                                                                                                                      0.0s
   => [cli] resolving provenance for metadata file                                                                                                               0.0s
  ------
   > [nginx internal] load metadata for docker.io/library/govcms-project-name:latest:
  ------
  Dockerfile.php:8
  --------------------
     6 |     ARG GOVCMS_IMAGE_VERSION=10.x-latest
     7 |
     8 | >>> FROM ${CLI_IMAGE} as cli
     9 |     FROM govcms/php:${GOVCMS_IMAGE_VERSION}
    10 |
  --------------------
  target php: failed to solve: govcms-project-name: failed to resolve source metadata for docker.io/library/govcms-project-name:latest: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
  View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/4v338vq-LoremIpsumDolorSitAmetConsectet

Solution-1

Firstly, log out using docker logout gitlab-registry-production.govcms.amazee.io and use docker login gitlab-registry-production.govcms.amazee.io -u govcms-gitlab-username -p personal-access-token command to login back (note that the personal access token provided must have read_repository access permission).

1
2
3
4
5
> docker logout gitlab-registry-production.govcms.amazee.io
  Removing login credentials for gitlab-registry-production.govcms.amazee.io
> docker login gitlab-registry-production.govcms.amazee.io -u govcms-gitlab-username -p personal-access-token
  WARNING! Using --password via the CLI is insecure. Use --password-stdin.
  Login Succeeded

Retry ahoy up command, if the error persists, continue …

Remove "credsStore": "osxkeychain" in ~/.docker/config.json file, such that docker no longer use the MacOS’s native binary for credential store:

1
2
3
4
5
6
7
8
9
{
	"auths": {
        "https://index.docker.io/v1/access-token":     {},
        "https://index.docker.io/v1/refresh-token":    {}
	},
-  "credsStore": "osxkeychain"
   "currentContext": "desktop-linux",
   ...
}

And re-run the logout/login command mentioned above:

1
2
3
4
5
> docker logout gitlab-registry-production.govcms.amazee.io
  Removing login credentials for gitlab-registry-production.govcms.amazee.io
> docker login gitlab-registry-production.govcms.amazee.io -u govcms-gitlab-username -p personal-access-token
  WARNING! Using --password via the CLI is insecure. Use --password-stdin.
  Login Succeeded

Instead of storying in MacOS’s keychain It will store your username/password in base64 encoded format in your ~/.docker/config.json file, for instance:

1
2
3
4
5
6
7
8
9
{
	"auths": {
+		"gitlab-registry-production.govcms.amazee.io": {"auth": "base64-encoded-username:password-c2ltbdudu190djasidjkasjdlasdjaskld"},
        "https://index.docker.io/v1/access-token":     {},
        "https://index.docker.io/v1/refresh-token":    {}
	},
   "currentContext": "desktop-linux",
   ...
}

Retry ahoy up command, if the error persists, continue …

If this still did not work, you can try also removing all the other auths items, only leaving gitlab-registry-production.govcms.amazee.io:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
	"auths": {
		"gitlab-registry-production.govcms.amazee.io": {"auth": "base64-encoded-username:password-c2ltbdudu190djasidjkasjdlasdjaskld"},
-       "https://index.docker.io/v1/access-token":     {},
-       "https://index.docker.io/v1/refresh-token":    {}
-        ...
	},
   "currentContext": "desktop-linux",
   ...
}

Retry ahoy up command, if the error persists, continue …

Create a docker-composer.override.yml file in the root of the project directory, and include the following content:

1
2
3
4
5
6
services:
  cli:
    build:
      args:
        GITHUB_Key: ghp_loremipsum_your_githubtoken
        GOVCMS_GITHUB_TOKEN: ghp_loremipsum_your_githubtoken

Retry ahoy up command, if the error persists, continue to solution-2

Solution-2

This solution worked for me, but I am not so certain as to why it worked …. so use it with caution ! The solution is simple, just run docker compose build cli to build cli service separately first, then run ahoy up as usual.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
> docker compose build cli
  ...
  ...
  [+] Building 1/1
  √ project-name-cli Built

> ahoy up
  ...
  [+] Building 26/26
  [+] Running 12/12
  Project         : ...
  Site local URL  : ...
  DB port on host : ...

(See: screenshot example)

Also sometimes just by running ahoy up for dozens of times worked for me as well for no specific reason.