Open4
CodeBuildでdindコンテナを起動してコンテナからネットワークアクセスするとエラーになる
[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:
このエラーが発生してしまう
goモジュールのインストールでネットワーク的にエラーになってるのでdaggerで立てられたコンテナが問題というよりはCodeBuild上のコンテナでGoモジュールのダウンロードで失敗している
ということは、daggerはあまり関係なさそう
次の切り分けは以下の2つ
-
そもそも設定が間違っていてCodeBuildの上に立てたコンテナのネットワークが繋がってない
-
dindのイメージを使ってるのでそれがネットワークに悪さをしている
CodeBuild上にコンテナを立ててGoのCI/CDは普段からやってるので2が怪しい
とりあえず1が問題ないか、おそらく通常のDaggerの使い方である、CodeBuildの環境にGoをインストールしてgo run main.goする方法で動くか試してみる
この記事を参考に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
を起動していることということがわかった