0

Envs

Docker version 19.03.13, build 4484c46d9d
docker-compose version 1.22.0, build f46880fe

Description

I'm trying to get started gin.
All of the codes in the same directory and there are no more codes.

docker-compose.yml

version: '3'

volumes:
  vendor:

services:
  api:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./src/api:/go/src/api
      - vendor:/go/src/api/vendor
    ports:
      - 3001:3001
    tty:
      true

Dockerfile

FROM golang:latest

RUN mkdir /go/src/work
WORKDIR /go/src/work
ADD . /go/src/work

RUN go get -u github.com/gin-gonic/gin
RUN go run main.go

main.go

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run(":3001")
}

I accessed to localhost:3001/ping but I got This site can’t be reached.

$ docker-compose up       
Building api
Step 1/6 : FROM golang:latest
 ---> 05c8f6d2538a
Step 2/6 : RUN mkdir /go/src/work
 ---> Using cache
 ---> cf36db942ec5
Step 3/6 : WORKDIR /go/src/work
 ---> Using cache
 ---> 42e96fcdf91e
Step 4/6 : ADD . /go/src/work
 ---> ad489bfc861d
Step 5/6 : RUN go get -u github.com/gin-gonic/gin
 ---> Running in 002710dc51c2
Removing intermediate container 002710dc51c2
 ---> ef8b0e792b6a
Step 6/6 : RUN go run main.go
 ---> Running in afebc25d81e7
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :3001

I want to know

How to fix it?

I tried

I tried to accessed to
http://localhost:3001
http://0.0.0.0:3001
http://0.0.0.0:3001/ping
I got This site can’t be reached in those cases too.

Don't Panic
  • 13,965
  • 5
  • 32
  • 51
Asuha
  • 231
  • 1
  • 5
  • 16

1 Answers1

0

The last statement in your dockerfile is wrong. It should be a CMD or ENTRYPOINT instead of a RUN statement. Docs are available at https://docs.docker.com/engine/reference/builder/

FROM golang:latest

RUN mkdir /go/src/work
WORKDIR /go/src/work
ADD . /go/src/work

RUN go get -u github.com/gin-gonic/gin
CMD go run main.go

The difference between RUN and CMD is explained here: Difference between RUN and CMD in a Dockerfile

ckaserer
  • 4,827
  • 3
  • 18
  • 33