我有一个Golang web应用程序,我希望在Docker容器中运行它。我可以在容器之外很好地运行它,所以我知道它可以工作,但是当我从Dockerfile构建它并运行它时,它给了我一个错误。
Makefile如下所示
GOCMD = go
GOBUILD = $(GOCMD) build
GOGET = $(GOCMD) get -v
GOCLEAN = $(GOCMD) clean
GOINSTALL = $(GOCMD) install
GOTEST = $(GOCMD) test
.PHONY: all
all: build
test:
$(GOTEST) -v -cover ./...
build:
$(GOGET); $(GOBUILD) -v -o engine
clean:
$(GOCLEAN) -n -i -x
rm -f $(GOPATH)/bin/engine
rm -rf bin/engine
install:
$(GOINSTALL)Dockerfile如下所示
FROM golang
ADD engine /go/bin/engine
EXPOSE 7777
ENTRYPOINT /go/bin/engine我正在构建映像,并使用以下命令运行它
docker build -t engine .
docker run -d --name engine -p 7777:7777 engine它给出了下面的错误
/go/bin/engine: 1: /go/bin/engine: Syntax error: "(" unexpected发布于 2017-09-05 01:03:06
当您构建二进制文件时,go build假定您正在尝试为当前计算机构建,它会为您选择GOOS和GOARCH (described here)的值。
如果您不是在linux机器上构建,那么您将需要交叉编译linux的二进制文件,因为这是docker容器内的操作系统将运行的。Explanation here
你需要这样的东西:
GOOS=linux
build:
$(GOGET); GOOS=$(GOOS) $(GOBUILD) -v -o enginehttps://stackoverflow.com/questions/37982259
复制相似问题