小沙弥爱吃肉 2023-09-08 11:49 采纳率: 33.3%
浏览 4

docker host 部署 访问

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模式下我要怎样才能访问到我的容器应用

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-08 16:57
    关注

    【以下回答由 GPT 生成】

    问题原因:在使用host模式部署容器时,容器会直接使用宿主机的网络栈,与宿主机共享网络命名空间。因此,容器内的应用程序绑定在宿主机的IP地址上监听端口,无法通过容器的IP地址访问。

    解决方案: 1. 首先,确认宿主机的防火墙设置是否允许访问容器应用的端口。可以使用以下命令检查防火墙规则: sudo iptables -L

    如果有防火墙规则限制了对容器端口的访问,可以使用以下命令开放该端口: sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    1. 确保容器应用程序监听的端口与Dockerfile中暴露的端口一致。在这个例子中,Dockerfile中定义了容器应用程序监听8080端口,并通过EXPOSE 8080暴露了该端口,在代码中使用了相同的端口。

    2. 使用host模式部署容器时,容器应用程序绑定在宿主机的IP地址上,因此可以通过访问宿主机的IP地址和相应的端口来访问容器应用。在这个例子中,可以使用宿主机的IP地址和8080端口来访问容器应用,如http://<宿主机IP地址>:8080

    可以使用以下命令获取宿主机的IP地址: ip addr show

    找到宿主机网络接口的IP地址,一般以enethwlan开头的接口都是宿主机的网络接口。

    思考:使用host模式部署容器可以提供更高的网络性能,但也会带来一些安全风险。在host模式下,容器所在的应用程序能够直接访问宿主机上的网络服务,因此需要确保宿主机上的安全措施完善,并认真考虑网络隔离等安全问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月8日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22