0
我使用Nicola Paolucci的Static Go Binaries with Docker on OSX嘗試使用具有Docker的靜態Go二進制文件。我相信我正確地遵循了每一步,但是當我運行最終的圖像時,我得到了來自Docker的以下錯誤響應。具有Docker的靜態轉向二進制文件 - 未找到入口點
注我的服務和可執行文件的名稱是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.5MB
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..
什麼「以下文章」?我在這裏看不到有關構建靜態二進制文件的任何內容,或者有什麼靜態二進制文件與docker錯誤有關。 – JimB
@JimB我更新了帖子。我很抱歉。 – TheJediCowboy
您不是按照指示構建靜態二進制文件。我不確定這是唯一的問題,但你需要從那裏開始。另外'天真/真實'圖像看起來並不特別有用。你可以自己從頭開始,或者使用像「阿爾派」這樣更完整的東西 – JimB