安全でないGitlabコンテナレジストリのため、接続が拒否されました。

安全でないGitlabコンテナレジストリのため、接続が拒否されました。

Ubuntu 22.04.2 LTSサーバーのランチャーでgitlab-ceインスタンスをホストするためにdocker composeを使用しています。

version: '3.7'
services:
  web:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'localhost'
    container_name: gitlab-ce
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.123.178'
    ports:
      - '80:80'
      - '8443:443'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    networks:
      - gitlab
  gitlab-runner:
    image: gitlab/gitlab-runner:alpine
    container_name: gitlab-runner
    restart: always
    depends_on:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - '$GITLAB_HOME/gitlab-runner:/etc/gitlab-runner'
    networks:
      - gitlab

networks:
  gitlab:
    name: gitlab-network

gitlab.rbコンテナにインストールされている設定ファイルでポート5050のコンテナレジストリを有効にしました。

...
registry_external_url 'http://192.168.123.178:5050'
...

gitlabのすべてのプロジェクトでAutoDevOps機能を使用できるため、コンテナレジストリが有効になっていることを確認できます。

次のコマンドを使用して、ランチャーをプロジェクトに登録します。

$ sudo docker exec -it gitlab-runner gitlab-runner register --url "http://gitlab-ce" --clone-url "http://gitlab-ce" --registration-token <registration_token_from_gitlab_web_interface> --executor docker --description "Deployment Runner" --docker-image "docker:stable" --docker-privileged

次のconfig.tomlファイルが生成されます。

[[runners]]
  name = "Deployment Runner"
  url = "http://gitlab-ce"
  id = 6
  token = "<token>"
  token_obtained_at = 2023-04-28T13:39:30Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  clone_url = "http://gitlab-ce"
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    # manually added this
    network_mode = "gitlab-network"

これで、nginxコンテナを使用してホストされる単純なHTMLウェブサイトを設定しました。.gitlab-ci.yml継続的な展開ワークフローをテストするために使用するファイルは次のとおりです。

stages:
  - publish
  - deploy

variables:
  TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
  TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_TLS_CERTDIR: ""

publish:
  image: docker:latest
  stage: publish
  services:
    - name: docker:dind
      command: ["--insecure-registry=localhost:5050"]
      
  script:
    - docker build -t $TAG_COMMIT -t $TAG_LATEST .
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
    - docker push $TAG_COMMIT
    - docker push $TAG_LATEST

deploy:
  image: alpine:latest
  stage: deploy
  tags:
    - deployment
  script:
    - chmod og= $ID_RSA
    - apk update && apk add openssh-client
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker pull $TAG_COMMIT"
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker container rm -f my-app || true"
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker run -d -p 80:80 --name my-app $TAG_COMMIT"
  environment:
    name: production
    url: http://192.168.123.178

すべてが問題ないようですが、ビルド段階で次のエラーが返されます。

...
$ docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://[MASKED]:5050/v2/": dial tcp [MASKED]:5050: connect: connection refused
Cleaning up project directory and file based variables
ERROR: Job failed: exit code 1

編集する:

言及することを忘れて、/etc/docker/deamon.json次のようにdockerデーモンをホストしているサーバーに安全でないコンテナレジストリも宣言しました。

{ "insecure-registries": ["localhost:5050"] }

gitlab-runnerコンテナで同じことをする必要があるかどうかわかりません。どうすればいいのかわかりません。

ベストアンサー1

おすすめ記事