docker host模式部署容器,宿主机没法访问容器应用
程序源码
以下代码创建一个http服务,主要功能是通过访问路径“/”来得到响应“Hello, Gin!”
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, Gin!",
})
})
r.Run(":8080")
}
Dockerfile打包成镜像
FROM golang:1.19.2 AS builder
MAINTAINER runningriven@gmail.com
EXPOSE 8080
WORKDIR /usr/src/docker-network
COPY . .
ENV GOPROXY=https://goproxy.cn,direct
RUN go mod tidy
RUN CGO_ENABLED=0 GOOS=linux go build -v -o server ./cmd \
&& cp server ./cmd/server
FROM ubuntu:22.04
WORKDIR /usr/local/bin/
COPY --from=builder /usr/src/docker-network/cmd/server ./server
CMD ["./server"]
bridge模式部署
version: '3'
services:
http-server:
image: server:simple
container_name: server
ports:
- "8080:8080"
host模式部署
version: '3'
services:
http-server:
image: server:simple
container_name: server
network_mode: "host"
测试
浏览器访问“http://127.0.0.1:8080”。
测试结果
bridge部署的容器:访问上述地址能正常输出“Hello, Gin!”
host模式部署的容器:访问上述地址显示 “127.0.0.1 拒绝了我们的连接请求。”
最终
我想知道为什么会造成上面的结果,以及在host模式下我要怎样才能访问到我的容器应用