Open4

CodeBuildでdindコンテナを起動してコンテナからネットワークアクセスするとエラーになる

Watanabe JinWatanabe Jin
[Container] 2022/11/19 10:43:22 Running command docker exec dagger sh -c "go run main.go"
go: dagger.io/dagger@v0.4.0: Get "https://proxy.golang.org/dagger.io/dagger/@v/v0.4.0.mod": dial tcp: lookup proxy.golang.org on 127.0.0.11:53: read udp 127.0.0.1:48137->127.0.0.11:53: read: connection refused
go: downloading dagger.io/dagger v0.4.0
go: dagger.io/dagger@v0.4.0: Get "https://proxy.golang.org/dagger.io/dagger/@v/v0.4.0.mod": dial tcp: lookup proxy.golang.org on 127.0.0.11:53: read udp 127.0.0.1:48137->127.0.0.11:53: read: connection refused

[Container] 2022/11/19 10:43:23 Command did not exit successfully docker exec dagger sh -c "go run main.go" exit status 1
[Container] 2022/11/19 10:43:23 Phase complete: BUILD State: FAILED
[Container] 2022/11/19 10:43:23 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker exec dagger sh -c "go run main.go". Reason: exit status 1
[Container] 2022/11/19 10:43:23 Entering phase POST_BUILD
[Container] 2022/11/19 10:43:23 Phase complete: POST_BUILD State: SUCCEEDED
[Container] 2022/11/19 10:43:23 Phase context status code:  Message: 

このエラーが発生してしまう

Watanabe JinWatanabe Jin

goモジュールのインストールでネットワーク的にエラーになってるのでdaggerで立てられたコンテナが問題というよりはCodeBuild上のコンテナでGoモジュールのダウンロードで失敗している

ということは、daggerはあまり関係なさそう

Watanabe JinWatanabe Jin

次の切り分けは以下の2つ

  1. そもそも設定が間違っていてCodeBuildの上に立てたコンテナのネットワークが繋がってない

  2. dindのイメージを使ってるのでそれがネットワークに悪さをしている

CodeBuild上にコンテナを立ててGoのCI/CDは普段からやってるので2が怪しい

とりあえず1が問題ないか、おそらく通常のDaggerの使い方である、CodeBuildの環境にGoをインストールしてgo run main.goする方法で動くか試してみる

Watanabe JinWatanabe Jin

https://dev.classmethod.jp/articles/building-go-project-in-codebuild/

この記事を参考にCodeBuild上にGo環境を作成してそこでgo run main.goを実行するようにbuildspec.ymlを作成した

buildspec.yml
version: 0.2

env:
  variables:
    GO_VERSION: 1.19.3
phases:
  install:
    commands:
      - apt-get update
      - apt-get install wget
      - wget https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz
      - tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz
      - export PATH="/usr/local/go/bin:$PATH" && export GOPATH="$HOME/go" && export PATH="$GOPATH/bin:$PATH"
  build:
    commands:
      - cd chapter2
      - go run main.go

これなら問題なくgo moduleのダウンロードが動いてCodeBuildが成功した
原因はdindを起動していることということがわかった