无法访问docker上gin所提供的localhost无法访问此站点

问题描述

Envs

Docker版本19.03.13,内部版本4484c46d9d
docker-compose版本1.22.0,构建f46880fe

说明

我正在尝试开始杜松子酒。
所有代码都在同一目录中,没有更多的代码

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")
}

我访问了localhost:3001 / ping,但得到了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

我想知道

如何解决

我尝试了

我试图访问
http:// localhost:3001
http://0.0.0.0:3001
http://0.0.0.0:3001/ping
在这些情况下,我也有This site can’t be reached

解决方法

您的dockerfile中的最后一条语句是错误的。它应该是CMDENTRYPOINT而不是RUN语句。可以从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

RUNCMD之间的区别在这里说明:Difference between RUN and CMD in a Dockerfile