0
votes

I am following directory structure based on: https://github.com/golang-standards/project-layout

I have created very simple app and basically I want to containerize it. Basically I have two files there. server.go which is definition of http endpoint and main file which starts server called main.go under cmd/webserver.

Directory of this project looks like:

./
├── cmd
│   └── webserver
│       └── main.go
├── Dockerfile
├── go.mod
└── server.go

go.mod

module github.com/geborskimateusz/auth

go 1.15

a Dockerfile looks like this

FROM golang:alpine

# Set necessary environmet variables needed for our image
ENV GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# Move to working directory /build
WORKDIR /build

# Copy and download dependency using go mod
COPY go.mod .
RUN go mod download

# Copy the code into the container
COPY . .

# Build the application
RUN go build -o main .

# Move to /dist directory as the place for resulting binary folder
WORKDIR /dist

# Copy binary from build to main folder
RUN cp /build/main .

# Export necessary port
EXPOSE 3000

# Command to run when starting the container
CMD ["/dist/main"]:

Build is successful but the problem is that when I run docker run -p 3000:3000 geborskimateusz/auth I got:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"/dist/main\": permission denied": unknown.
ERRO[0000] error waiting for container: context canceled 

What am I missing? I assume that maybe I need to cd in Dockerfile into cmd/webserver where main.go (executable file) is placed.

1
try run with sudo - dılo sürücü

1 Answers

0
votes

I actually fixed this by modyfing DockerFile to

FROM golang:alpine

WORKDIR /app
COPY go.mod .
RUN go mod download
COPY . .

RUN cd ./cmd/webserver/ && go build -o main . && cp main ../../ && cd ../../

CMD ["./main"]