10

テスト環境で実行されている GitLab の最新の Docker イメージがあり、GitLab ランナーで問題が発生しています。HTTP リンク経由で複製できず、次のメッセージが表示されます。

Running on runner-bd27e50b-project-1-concurrent-0 via machine...
Cloning repository...
Cloning into '/builds/my/awesome-project'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxx@127.0.0.1/my/awesome-project.git/': 
    Failed to connect to 127.0.0.1 port 80: Connection refused

ERROR: Build failed with: exit code 1

フラグを付けて gitlab-runner を実行し、--debug試みていた正確なアドレスを (トークンをそのまま使用して) 使用したところ、リポジトリを問題なく複製できました。サービスがリポジトリのクローンを作成できない理由がわかりません。ランナーエグゼキュータも「docker」として構成されています。そのコンテナへのポート マッピングの問題があるのではないでしょうか?

4

3 に答える 3

9

この質問はかなり古いことは知っていますが、少し異なるアプローチを使用できます(同じ問題でdocker runnerを使用している場合)。

ドメイン名で Gitlab を実行します。これは完全に仮想的なものである可能性があります。すべての VM がドメイン名を解決できることを確認してください。

次に、/etc/gitlab-runner/config.tomlを変更し、 value のセクションにextra_hostsvariable を追加します。必要な他のホストを追加することもできます。[runners.docker]["your_domain_name:ip_address"]

ランナー構成の詳細については、 https: //gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md を参照してください。

于 2016-03-02T22:59:33.267 に答える
8

この問題は、ランナーを docker コンテナーとして登録することに関係しており、localhost アドレスが適切なマシン (ランナーを開始している場所) に解決されない可能性があると仮定しました。この場合、代わりにコンテナに解決される可能性があります。ランナーを登録するときに、docker プロキシ インターフェイスでホストの IP (私の場合は 172.17.0.1) を使用するか、「localhost」の代わりにホストの実際のアドレスを使用すると、問題が解決します。

編集:私が理解している問題と解決策について、もう少し詳しく説明します。読み込まれた docker インスタンスは、(非常に) 軽量な仮想マシンのようなものです。Docker は、ホスト マシンから ifconfig を実行すると表示される仮想ネットワーク インターフェイスを構成します。

user@pc:~> ifconfig
docker0   Link encap:Ethernet  HWaddr XXXX
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          ...

これは、そのインターフェイス上のホスト マシンの IP アドレスです。そのため、ランナーがそのホスト マシンで実行されているサービスに接続できるようにする場合、ランナーのインスタンス内から送信され、ランナーの " VM」ですが、GitLab はそのランナー「VM」内では実行されておらず、ホスト上にあるため、ランナーは GitLab と通信できません。

解決策は、Docker インターフェース (私にとってはhttp://172.17.0.1/ci ) でホストの仮想アドレスを指すようにランナーを登録するか、ホストのパブリック IP またはドメイン名がありアクセス可能な場合はそれを使用することです。公に。localhost または 127.0.0.1 に送信しないでください。これは、ランナーにとって、GitLab インスタンスではなく、その「VM」を指すためです。

于 2015-11-30T20:57:55.967 に答える