问题描述
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中的最后一条语句是错误的。它应该是CMD
或ENTRYPOINT
而不是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