我有一个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
答案 0 :(得分:0)
当您构建二进制文件时,go build
会假定您正在尝试为当前计算机构建,它会为您选择GOOS
和GOARCH
(described here)的值。
如果你不是在linux
机器上构建,那么你将需要交叉编译linux的二进制文件,因为这就是docker容器中的操作系统将运行的内容。 Explanation here
您需要以下内容:
GOOS=linux
build:
$(GOGET); GOOS=$(GOOS) $(GOBUILD) -v -o engine