首页 > 解决方案 > 无法访问 docker 上 gin 服务的 localhost(无法访问此站点)

问题描述

环境

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

描述

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

码头工人-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

标签: dockergodocker-compose

解决方案


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

RUN和之间的区别在CMD这里解释:Difference between RUN and CMD in a Dockerfile


推荐阅读