skip to Main Content

So I am a novice to Docker and Golang. I created a REST API in go-gin framework and a docker image and when I am running the image it gives me following error:

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/app/main": stat /app/main: no such file or directory: unknown.

My command for running the image is: docker run -d -p 3000:3000 json-crud
"json-crud" is the name of the image.

Following is my Dockerfile content:

FROM golang:latest
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go get ./...
RUN go mod tidy
RUN go mod download
RUN go build /app
CMD ["/app/main"]

My local files directory is as follow:

enter image description here

This is my go.mod file:

module nishanktiwari/json-crud

go 1.19

require github.com/gin-gonic/gin v1.8.2

require (
    github.com/gin-contrib/sse v0.1.0 // indirect
    github.com/go-playground/locales v0.14.0 // indirect
    github.com/go-playground/universal-translator v0.18.0 // indirect
    github.com/go-playground/validator/v10 v10.11.1 // indirect
    github.com/goccy/go-json v0.9.11 // indirect
    github.com/json-iterator/go v1.1.12 // indirect
    github.com/leodido/go-urn v1.2.1 // indirect
    github.com/mattn/go-isatty v0.0.16 // indirect
    github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
    github.com/modern-go/reflect2 v1.0.2 // indirect
    github.com/pelletier/go-toml/v2 v2.0.6 // indirect
    github.com/ugorji/go/codec v1.2.7 // indirect
    golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 // indirect
    golang.org/x/net v0.4.0 // indirect
    golang.org/x/sys v0.3.0 // indirect
    golang.org/x/text v0.5.0 // indirect
    google.golang.org/protobuf v1.28.1 // indirect
    gopkg.in/yaml.v2 v2.4.0 // indirect
)

2

Answers


  1. After go build /app try to add an ls /app to see if the main binary got generated correctly. You will need to figure out why the compilation failed and then fix it to get everything to work correctly.

    Hope this helps.

    Login or Signup to reply.
  2. You haven’t shown your go.mod file so I’m guessing here. But this could be explained if your module is named something other than:

    module main
    

    Note that the go build /app command during your Docker build does not specify an output binary. If not specified, it defaults to the module name.
    Try changing the command to go build -o main /app and try again.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search