ko を試してみた(未解決)

2022/02/11に公開

golangのアプリケーションサーバをdockerイメージ化する際にとても便利なツールとしてkoがあるというのを知ったので試してみたが、ビルドがうまくいかない。dockerデーモンを探しているようだ。

terminal
$ ko publish --local --base-import-paths .
2022/02/11 23:08:11 Using base gcr.io/distroless/static:nonroot for httpserver_sample
2022/02/11 23:08:14 Building httpserver_sample for linux/amd64
2022/02/11 23:08:15 Loading ko.local/httpserver_sample:0cfada1c160085680b8686635a06dd9f4f0e7fb7c561e5f4a84eaa60049bcc91
2022/02/11 23:08:15 daemon.Write response:
Error: failed to publish images: error publishing ko://httpserver_sample: error loading image: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
2022/02/11 23:08:15 error during command execution:failed to publish images: error publishing ko://httpserver_sample: error loading image: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

何がトリガーとなってdocker daemonを探すようになっているのだろう。

		if repoName == publish.LocalDomain || po.Local {
			// TODO(jonjohnsonjr): I'm assuming that nobody will
			// use local with other publishers, but that might
			// not be true.
			return publish.NewDaemon(namer, po.Tags,
				publish.WithDockerClient(po.DockerClient),
				publish.WithLocalDomain(po.LocalDomain),
			)
		}

https://github.com/google/ko/blob/89ede9110a1333a31bf417cb5fed6f69f8084ff1/pkg/commands/resolver.go

このif文がtrueになっていないといけないのに、falseになっているということか。

	cmd.Flags().BoolVarP(&po.Local, "local", "L", po.Local,
		"Load into images to local docker daemon.")

https://github.com/google/ko/blob/f5762bedf31a4c6852d75febe1f509b892cc122f/pkg/commands/options/publish.go#L90

おや。--localオプションは docker daemonを探しにいくのかよ、、。
dockerをインストールしていない場合のオプションはどうするのかな。

k8s 上にリポジトリを作成してそれを KO_DOCKER_REPO に指定するのが良いかもしれない。
それもちょっとめんどくさそうだなぁ。

https://ymotongpoo.hatenablog.com/entry/2021/12/22/090000

Discussion