TheJediCowboy
TheJediCowboy

Reputation: 9232

Golang Dockerfile Failing

I have a Golang web application that I am looking to run in Docker container. I am able to run it fine outside of the container, so I know it works, but when I build it from Dockerfile and run it, it gives me an error.

The Makefile looks like the following

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)

And the Dockerfile looks like the following

FROM golang

ADD engine /go/bin/engine

EXPOSE 7777

ENTRYPOINT /go/bin/engine

I am building the image and running it using the following

docker build -t engine .
docker run -d --name engine -p 7777:7777 engine

and its giving me the following error

/go/bin/engine: 1: /go/bin/engine: Syntax error: "(" unexpected

Upvotes: 3

Views: 1111

Answers (1)

Zak
Zak

Reputation: 5898

When you build a binary, go build assumes that you are trying to build for your current computer, it chooses values for GOOS and GOARCH (described here) for you.

If you are not building on a linux machine then you will need to cross compile the binary for linux, as this is what the OS inside the docker container will be running. Explanation here

You need something like:

GOOS=linux

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

Upvotes: 2

Related Questions