Nicola PaolucciがStatic Go Binaries with Docker on OSXを使って静的Goバイナリw/Dockerを使用しようとしました。私はすべてのステップを正しく実行したと信じていますが、最終イメージを実行すると、Dockerから次のエラー応答が返されます。Docker付きスタティックゴーバイナリ - Entrypointが見つかりません
NOTE私のサービスや実行ファイルの名前がnetverify
docker: Error response from daemon: Container command '/netverify' not found or does not exist..
あるマイDockerfile.static
#Create a minimal container to run a Golang static binary
FROM tianon/true
ADD netverify/
EXPOSE 8282
CMD ["/netverify"]
マイDockerfile.build
には、次の...
FROM golang
ADD Makefile/
WORKDIR/
RUN make setup
ADD . /go/src/github.com/eirwin/netverify
RUN make buildgo
CMD ["/bin/bash"]
私Makefile
は、この記事の目的のために、次の...
GOCMD = go
GOBUILD = $(GOCMD) build
GOGET = $(GOCMD) get -v
GOCLEAN = $(GOCMD) clean
GOINSTALL = $(GOCMD) install
GOTEST = $(GOCMD) test
.PHONY: all
all: build
setup:
$(GOGET) github.com/gorilla/mux
buildgo:
GOOS=linux $(GOBUILD) -o netverify ./go/src/github.com/eirwin/netverify
builddocker:
docker build -t eirwin/netverify -f ./Dockerfile.build .
docker run -t eirwin/netverify /bin/true
docker cp `docker ps -q -n=1`:/netverify .
chmod 755 ./netverify
docker build --rm=true --tag=eirwin/netverify -f Dockerfile.static .
run: builddocker
docker run -p 8282:8282 eirwin/netverify
で、私は私のgolangアプリケーションとして、次の前提としています。
func main() {
router := mux.NewRouter()
router.HandleFunc("/ping", api.PingHandler).Methods("GET")
http.ListenAndServe(":8282", router)
}
私はMake run
すべてを実行した画像が実行されたときを除いて動作するようです。
私は〜8.5メガバイトの画像が正しく構築していることがわかります
eirwin/netverify latest eae16e146b91 3 seconds ago 8.63 MB
しかしdocker run -p 8282:8282 eirwin/netverify
が走っている場合は、私は次のエラーを取得する...
docker: Error response from daemon: Container command '/netverify' not found or does not exist..
"次の記事"とは何ですか?私は静的なバイナリを構築することについて何も表示されません、または静的なバイナリを持つことは、ドッカーのエラーと関係があります。 – JimB
@JimB投稿を更新しました。謝罪いたします。 – TheJediCowboy
あなたは方向ごとにスタティックバイナリを構築していません。それが唯一の問題なのかどうかは分かりませんが、そこから始める必要があります。また、 'tianon/true'画像は特に有用に見えません。 'scratch'で自分自身を始めることもできますし、' alpine'のようにもっと完全なものを使うこともできます – JimB