【发布时间】:2016-10-25 05:38:49
【问题描述】:
我有一个希望在 Docker 容器中运行的 Golang Web 应用程序。我可以在容器外很好地运行它,所以我知道它可以工作,但是当我从 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
【问题讨论】:
-
问:为什么要在容器内构建 Go?为什么不使用 Dockerfile 引入的预构建二进制文件?
-
在容器中构建它对我来说更有意义。似乎有助于确保构建更加一致。
-
查看blog.golang.org/docker 在我看来,您的 docker 文件中缺少一些设置。
-
@elithrar 这就是我想要做的
-
@JoshWilson 我已经在容器中得到了这个工作良好的建筑,但出于优化目的,我希望能够将二进制文件传递到 dockerfile 中
标签: go docker dockerfile