docker - 无法访问 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
解决方案
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
推荐阅读
- c# - Winforms 组合框显示类名而不是实际对象名
- google-maps - 谷歌地图在灰度模式下设置方向
- python - 根据当前数据框中的约束生成数据框列
- c# - 当我点击播放时,我的 Sprite 角色会旋转。为什么?
- jquery - Facebook sdk 脚本无法重新加载
- c# - 取消授权时重定向
- c++ - C++ std::vector 迭代器行为奇怪,不允许递增
- java - Spring data redis (with lettuce) 创建包装库的优势
- typescript - 如何获取整个函数的类型,而不仅仅是 Parameters 或 ReturnType
- flutter - 如何在 Flutter 中的 TextFormField 标签中添加红色星号