Golang Dockerfile失败

时间:2016-06-23 04:18:51

标签: go docker dockerfile

我有一个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

1 个答案:

答案 0 :(得分:0)

当您构建二进制文件时,go build会假定您正在尝试为当前计算机构建,它会为您选择GOOSGOARCHdescribed here)的值。

如果你不是在linux机器上构建,那么你将需要交叉编译linux的二进制文件,因为这就是docker容器中的操作系统将运行的内容。 Explanation here

您需要以下内容:

GOOS=linux

build:
    $(GOGET); GOOS=$(GOOS) $(GOBUILD) -v -o engine