2

Gogs/webhooks インターフェイスでテスト配信ボタンをクリックすると、このエラーが発生しました。

Delivery: Post http://localhost:8000/hook?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZXh0IjoidG9tL2Ryb255IiwidHlwZSI6Imhvb2sifQ.UZdOVW2IdiDcLQzKcnlmlAxkuA8GTZBH634G0K7rggI : dial tcp [::1]:8000: getsockopt: connection refused

これは私のdocker-compose.ymlファイルです

version: '2'
services:
  gogs:
    image: gogs/gogs
    ports:
      - 3000:3000
      - 22:22
    links:
      - mysql

  mysql:
    image: mysql
    expose:
      - 3306
    environment:
      - MYSQL_ROOT_PASSWORD=1234
      - MYSQL_DATABASE=gogs

  drone:
    image: drone/drone
    links:
     - gogs
    ports:
      - 8000:8000
    volumes:
      - ./drone:/var/lib/drone 
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - REMOTE_DRIVER=gogs
      - REMOTE_CONFIG=http://gogs:3000?open=true
      # - PUBLIC_MODE=true
4

1 に答える 1

2

根本的な原因は、Drone が外部アドレスを localhost:8000 と想定していることです。これは、ブラウザーからのアクセス方法であるためです。したがって、Drone はすべての Gogs Webhook をlocalhost:8000/hookコールバック URL として使用するように構成します。

ここでの問題は、Gogs と Drone が別々のネットワーク上の別々のコンテナーで実行されていることです。これは、Gogs がフックをドローンに送信しようとするlocalhost:8000と、ドローンが別のブリッジにあるために送信され、失敗することを意味します。

推奨される修正

推奨される修正は、Drone と Gogs で DNS または IP アドレスを使用することです。いずれかのシステムの実稼働インストールを実行している場合、localhost を使用する可能性は低いため、これは合理的な解決策のように思えます。

ローカル テストでは、Docker によって割り当てられたローカル IP アドレスを使用することもできます。Docker inspect を使用して、Drone と Gogs の IP アドレスを見つけることができます。

"Networks": {
  "default": {
    "IPAddress": "172.18.0.3"
  }
}

カスタム ホスト名を使用しないのはなぜですか?

http://gogsなどのカスタム ホスト名を使用すると問題が発生します。ドローンは、デフォルトの Docker ネットワーク設定を使用してビルドごとに一時的な Docker コンテナーを作成するためです。これは、ビルド環境が独自の分離されたネットワークを使用し、http://gogsを解決できないことを意味します。

そのため、カスタム ホスト名を使用して通信するように Drone と Gogs を構成したとしても、ビルド環境は Gogs ホスト名を解決してリポジトリを複製することができません。

于 2016-08-21T00:35:01.750 に答える