我使用了Nicola的OSX上带有Docker的静态Go二进制文件来尝试使用静态Go二进制w/ 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 为了这篇文章的目的,让我们假设我有以下作为我的戈朗应用程序。
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..发布于 2016-08-02 02:48:27
makefile中的go静态构建缺少一些选项。
buildgo:
CGO_ENABLED=0 GOOS=linux go build -ldflags "-s" -a -installsuffix cgo -o netverify ./go/src/github.com/eirwin/netverify构建过程可以捕获容器ID以避免计时问题。
分离生成和二进制图像的标记。
builddocker:
docker build -t eirwin/netverify-build -f ./Dockerfile.build .
CID=$$(docker create eirwin/netverify-build); \
docker cp $$CID:/netverify .; \
docker rm $$CID
chmod 755 ./netverify
docker build --rm=true --tag=eirwin/netverify -f Dockerfile.static .二进制Dockerfile.static可以从scratch空白图像开始。
FROM scratchhttps://stackoverflow.com/questions/38706880
复制相似问题