Gitlab CI 尝试从 public docker hub 中找到 'of:latest' 图像

Gitlab CI tries to find 'of:latest' image from public docker hub

我有以下 .gitlab-ci.yml 长生不老药项目的任务:

image: docker:latest
services:
    - docker:dind

stages:
  - build
  - test
  - release
  - deploy

variables:
  TEMP_IMAGE: registry.gitlab.com/farmmix/homepage/farmmix_homepage:$CI_COMMIT_SHA

before_script:
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com 

build:
  stage: build
  script:
    - cd src
    - docker build --pull -t $TEMP_IMAGE .
    - docker push $TEMP_IMAGE

test:
  stage: test
  variables:
    DB_DATABASE: test
    DB_USERNAME: postgres
    DB_PASSWORD: postgres
    DB_URL: postgres
  script:
    - echo $TEMP_IMAGE
    - docker pull $TEMP_IMAGE
    - docker pull postgres:9.5-alpine
    - docker run --name postgres -e POSTGRES_DB=$DB_DATABASE -e POSTGRES_USER=$DB_USERNAME -e POSTGRES_PASSWORD=$DB_PASSWORD -d postgres:9.5-alpine
    - docker run --link postgres $TEMP_IMAGE ecto.create ecto.migrate test

$TEMP_IMAGE 是在之前的 build 任务中创建的现有图像。

如果我 运行 在本地使用 gitlab-runner exec docker --docker-privileged test,它工作正常。

然而,gitlab 运行ner 给了我以下内容:

... AFTER INITIALIZATION ...
Skipping Git submodules setup
$ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded
$ echo $TEMP_IMAGE 
registry.gitlab.com/farmmix/homepage/farmmix_homepage:b0c30097a320933f7d5390d7037960e34d2ef7d
$ docker pull $TEMP_IMAGE
b0c30097a320933f7d5390d7037960e34d2ef7d0: Pulling from farmmix/homepage/farmmix_homepage
605ce1bd3f31: Pulling fs layer
...
e0c7f5df971a: Pull complete
Digest: sha256:ce7a1bf2378628902e171a22ee386af6c79e8d2340b6241ab70e83173e32ce28
Status: Downloaded newer image for registry.gitlab.com/farmmix/homepage/farmmix_homepage:b0c30097a320933f7d5390d7037960e34d2ef7d0
$ docker pull postgres:9.5-alpine
9.5-alpine: Pulling from library/postgres
550fe1bea624: Pulling fs layer
04bf519c70df: Pulling fs layer
...
0dca1c6b5036: Pull complete
Digest: sha256:fc3b8fcc8ba568492ce89fd8723a949f586e2919d7884b9b1d8064237ba105d7
Status: Downloaded newer image for postgres:9.5-alpine
$ docker run --name postgres -e POSTGRES_DB=$DB_DATABASE -e POSTGRES_USER=$DB_USERNAME -e POSTGRES_PASSWORD=$DB_PASSWORD -d postgres:9.5-alpine
Unable to find image 'of:latest' locally
docker: Error response from daemon: pull access denied for of, repository does not exist or may require 'docker login'.
See 'docker run --help'.
ERROR: Job failed: exit code 125

我什至在互联网上找不到任何关于这个 'of:latest' 错误的信息。我在没有 -e 参数的情况下尝试了 运行ning docker run 命令,但出现了同样的错误,所以并不是环境变量造成了任何问题。

我运行没主意了。你们中有人怀疑解决方案可能是什么吗?

编辑:添加了完整的.gitlab-ci.yml内容

EDIT2:添加 echo 和作业输出

$ docker run --name postgres -e POSTGRES_DB=$DB_DATABASE -e POSTGRES_USER=$DB_USERNAME -e POSTGRES_PASSWORD=$DB_PASSWORD -d postgres:9.5-alpine
Unable to find image 'of:latest' locally
docker: Error response from daemon: pull access denied for of, repository does not exist or may require 'docker login'.

您的其中一个变量几乎肯定包含字符串 " of "。您可以通过添加一行来测试它:

echo docker run --name postgres -e POSTGRES_DB=$DB_DATABASE -e POSTGRES_USER=$DB_USERNAME -e POSTGRES_PASSWORD=$DB_PASSWORD -d postgres:9.5-alpine

先看看它在尝试什么 运行。对于变量,最好引用它们以避免任何特殊字符或空格的问题:

docker run --name postgres -e "POSTGRES_DB=$DB_DATABASE" -e "POSTGRES_USER=$DB_USERNAME" -e "POSTGRES_PASSWORD=$DB_PASSWORD" -d postgres:9.5-alpine