iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >docker部署golanghttp服务时端口无法访问的问题解决
  • 665
分享到

docker部署golanghttp服务时端口无法访问的问题解决

docker部署golanghttpdockergolanghttp端口访问 2022-11-13 14:11:21 665人浏览 泡泡鱼
摘要

目录1.背景1.1 问题描述1.2 WEBserver代码3.Dockerfile文件2.问题分析3.解决方案需要使用docker将golang的httpserver容器化。在这个过

需要使用docker将golanghttpserver容器化。在这个过程中遇到了一个低级问题,Golang Http服务时端口无法访问,特此记录解决这个问题的过程。

1.背景

1.1 问题描述

问题描述: docker镜像启动成果之后,通过curl不能访问:

[root@hecs-205828 ~]# curl -XGET http://127.0.0.1:8360/hello
curl: (56) Recv failure: Connection reset by peer

1.2 webserver代码

go文件:main.go

package main

import (
   "fmt"
   "net/http"
   "os"
   "strings"
)

func main() {
   http.HandleFunc("/hello", handler_hello)
   http.HandleFunc("/healthz", handler_healthz)
   http.ListenAndServe("127.0.0.1:8360", nil)
}

func handler_healthz(w http.ResponseWriter, r *http.Request) {
   w.WriteHeader(http.StatusOK)
   w.Write([]byte("OK"))
}

func handler_hello(w http.ResponseWriter, r *http.Request) {
   fmt.Println("method = ", r.Method)
   fmt.Println("URL = ", r.URL)
   fmt.Println("RemoteAddr = ", r.RemoteAddr)
   fmt.Println("IP = ", strings.Split(r.RemoteAddr, ":")[0])
   fmt.Println("header = ", r.Header)
   fmt.Println("body = ", r.Body)
   fmt.Println(r.RemoteAddr, "连接成功")

   for name, values := range r.Header {
      for _, value := range values {
         fmt.Println(name, value)
         _, exits := w.Header()[name]
         if exits {
            w.Header().Add(name, value)
         } else {
            w.Header().Set(name, value)
         }
      }
   }
   VERSION := os.Getenv("VERSION")
   fmt.Println("VERSION is :", VERSION)
   w.Header().Set("VERSION", VERSION)
   w.WriteHeader(http.StatusOK)
   w.Write([]byte("hello http server"))
}

3.Dockerfile文件

Dockerfile文件:

FROM golang:1.17 AS build

WORKDIR /web-server/

COPY . .
ENV CGO_ENABLED=0
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
RUN GOOS=linux go build -installsuffix cgo -o web-server main.go

FROM busybox
COPY --from=build /web-server/web-server /web-server/web-server
EXPOSE 8360
ENV ENV local
WORKDIR /web-server/
ENTRYPOINT ["/web-server/web-server"]

2.问题分析

发现curl无法访问docker容器中的服务,telnet结果如下:

[root@hecs-205828 ~]# telnet 127.0.0.1 8360
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.

于是,打算采用命令进入docker容器内部查看:

[root@hecs-205828 ~]# docker ps -a
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                       NAMES
dfb2b46abd34   httpserver:0.0.1   "/web-server/web-ser…"   27 hours ago     Up 2 hours      0.0.0.0:8360->8360/tcp, :::8360->8360/tcp   relaxed_mccarthy

通过docer ps -a 得到容器id为dfb2b46abd34。进入容器:

[root@hecs-205828 ~]# docker exec -it dfb2b46abd34 sh
/web-server # ps 
PID   USER     TIME  COMMAND
    1 root      0:00 /web-server/web-server
   38 root      0:00 sh
   94 root      0:00 sh
  101 root      0:00 ps
/web-server # netstat -an |grep 8360
tcp        0      0 127.0.0.1:8360          0.0.0.0:*               LISTEN      
/web-server #

可以看到,在容器内部实际上8360端口已经被监听。容器访问应该不存在问题。 容器内部支持wget:

/web-server # wget -q -O -  http://127.0.0.1:8360/hello
hello http server
/web-server # 

可以看到在docker服务内部运行是正常的。

查看其网络端口衍射:

[root@hecs-205828 ~]# docker port  dfb2b46abd34 
8360/tcp -> 0.0.0.0:8360
8360/tcp -> :::8360

端口衍射也不存在问题。那么问题究竟出在什么地方呢? 忽然想到,容器内部的nestat监听端口是127.0.0.1,于是瞬间明白了。 在容器内部的监听端口为127.0.0.1的话,那么只能接受容器内部来自127.0.0.1的本地回环访问。来自容器外外部的访问请求将被拒绝。 因此,这个问题的修复原因实际上很简单,只需要将main.go的中监听ip改为0.0.0.0即可。

3.解决方案

果断将监听ip改为0.0.0.0:

func main() {
   http.HandleFunc("/hello", handler_hello)
   http.HandleFunc("/healthz", handler_healthz)
   http.ListenAndServe("0.0.0.0:8360", nil)
}

之后重新制作镜像:

sudo docker build . -t httpserver:0.0.2

然后启动本地镜像:

 sudo docker run -d -p 8260:8230 httpserver:0.0.2

启动之后:

[root@hecs-205828 ~]# docker ps -a
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                       NAMES
ae5e2bf431c7   httpserver:0.0.2   "/web-server/web-ser…"   50 minutes ago   Up 50 minutes   0.0.0.0:8260->8360/tcp, :::8260->8360/tcp   affectionate_nash
dfb2b46abd34   httpserver:0.0.1   "/web-server/web-ser…"   27 hours ago     Up 2 hours      0.0.0.0:8360->8360/tcp, :::8360->8360/tcp   relaxed_mccarthy
[root@hecs-205828 ~]# 

之后再访问新增的容器,结果正常:

[root@hecs-205828 ~]# curl -XGET http://127.0.0.1:8260/hello
hello http server
[root@hecs-205828 ~]# 

问题解决。

到此这篇关于docker部署golang http服务时端口无法访问的问题解决的文章就介绍到这了,更多相关docker部署golang http内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: docker部署golanghttp服务时端口无法访问的问题解决

本文链接: https://www.lsjlt.com/news/171866.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • docker部署golanghttp服务时端口无法访问的问题解决
    目录1.背景1.1 问题描述1.2 webserver代码3.Dockerfile文件2.问题分析3.解决方案需要使用docker将golang的httpserver容器化。在这个过...
    99+
    2022-11-13
    docker部署golang http docker golang http端口访问
  • 关于docker部署服务时ip无法访问服务正常的问题
    背景 今日,使用docker部署应用的时候,无法使用IP地址访问,防火墙已经关闭,可以ping通,应用已经配置0.0.0.0 解决 经过查阅资料。 学习网络传输中有一个 net.ip...
    99+
    2024-04-02
  • docker端口无法访问怎么解决
    当Docker容器的端口无法访问时,可以尝试以下解决方法:1. 检查容器是否正在运行:使用`docker ps`命令确保容器正在运行...
    99+
    2023-08-25
    docker
  • docker端口映射无法外部访问怎么解决
    如果Docker容器的端口映射无法从外部访问,可以尝试以下解决方法:1. 检查Docker容器的端口映射配置是否正确。确保容器的端口映射配置正确地将容器内部的端口映射到主机的端口上。2. 检查主机的防火墙设置。确保主机的防火墙允许外部访...
    99+
    2023-08-11
    docker
  • docker部署MySQL时无法启动问题的解决方法
    目录一、安装环境 ubuntu18 + docker 二、遇到无法启动的问题时,查看日志发现的错误总结一、安装环境 ubuntu18 + docker  dock...
    99+
    2023-01-28
    docker mysql无法启动 docker启动mysql失败 docker mysql启动
  • 如何解决80端口无法访问的问题
    本篇内容主要讲解“如何解决80端口无法访问的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决80端口无法访问的问题”吧!近日传adsl的80端口被封,很多机房,服务器的80端口被封,确...
    99+
    2023-06-10
  • 解决docker容器无法访问的问题
    服务器上的docker容器都无法访问了,而且裸机部署的应用则没有任务问题。 docker容器重启多次均无法访问!!! docker服务重启也无济于事!!! 服务器网卡重启也不行!!! 网上搜了一堆方法...
    99+
    2023-09-14
    docker 服务器 运维
  • 服务器防火墙开放端口(解决服务器端口无法访问问题)
    目录 一、解决思路 1. 判断服务器使用的是firewall还是iptable 2. 判断firewall当前开启的服务和端口,查看当前firewall的所有信息 3. 添加http服务 4. 重新执行 5. 添加开放端口 6.查看端口是否...
    99+
    2023-09-16
    服务器 网络 运维
  • 云服务器部署docker问题无法启动
    首先,云服务器的启动是一个重要的问题。当用户选择云服务器并将其部署到网络中时,用户需要确保服务器已经启动并处于可用状态。有时,用户可能无法立即启动服务器,这可能会导致数据丢失或应用程序无法正常运行。为了解决这个问题,我们可以使用云服务器管理...
    99+
    2023-10-27
    无法启动 服务器 docker
  • 新部署的WebLogicServer无法访问怎么解决
    本篇内容主要讲解“新部署的WebLogicServer无法访问怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“新部署的WebLogicServer无法访问...
    99+
    2024-04-02
  • docker端口无法访问的原因有哪些
    有以下几个常见的原因可能导致Docker端口无法访问:1. 防火墙配置:可能是因为防火墙的规则限制了对Docker容器端口的访问。可以尝试禁用或配置防火墙规则来允许对特定端口的访问。2. 容器网络配置:Docker容器的网络配置可能有问...
    99+
    2023-08-11
    docker
  • mysql中3306端口无法访问的解决方法
    这篇文章给大家分享的是有关mysql中3306端口无法访问的解决方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql 3306错误端口无法访问的解决办法:首先修改mysq...
    99+
    2024-04-02
  • Android外部存储无法访问问题解决方法
    最近在做Android 应用开发,IDE是android studio , 使用的版本配置如下: compileSdk 32 buildToolsVersion '32.0.0...
    99+
    2024-04-02
  • 解决阿里云服务器端口开放访问问题的方法
    1. 检查防火墙设置 阿里云服务器默认启用了安全组,安全组中的防火墙规则可能会限制某些端口的访问。因此,首先需要检查服务器的安全组设置,确保需要开放的端口已经添加到了安全组的入站规则中。 2. 检查服务器端口监听状态 在确认安全组设置无误...
    99+
    2023-10-28
    阿里 端口 服务器
  • Docker部署HAProxyv2.2.29并暴露指标接口的问题解决
    目录1.背景2.目的3.HAProxy 简介4.HAProxy 优点5. HAProxy配置说明6. 部署脚本参考资料1.背景 在haproxy 2.0 版本之前,prometheu...
    99+
    2023-05-16
    Docker 部署HAProxy v2.2.29 Docker 部署HAProxy HAProxy部署
  • 腾讯云服务器tomcat端口无法访问的解决方法
    最近用腾讯云配置了服务器,在使用的时候发现tomcat端口无法访问,所以在网上找了点资料,一共有两种情况,下面总结一下,希望对大家有所帮助,也给自己留个笔记。 第一种情况: 如题:h...
    99+
    2024-04-02
  • 云服务器80端口无法访问
    如果您的云服务器80端口没有被正确关闭,则可能会导致无法访问互联网。您可以通过以下方法之一尝试解决问题: 使用防火墙:如果您的计算机通过防火墙(例如Nginx内置的防火墙)连接到互联网,则可能会无法访问互联网。尝试在防火墙后面启动浏览器...
    99+
    2023-10-26
    端口 无法访问 服务器
  • 为什么go无法访问docker中的8080端口
    php小编西瓜在这里为大家解答一个常见问题:为什么Go语言无法访问Docker容器中的8080端口?在使用Docker容器时,我们常常会遇到无法访问容器内部端口的问题。这往往是因为Do...
    99+
    2024-02-11
    go语言
  • Linux服务器80端口无法访问
    Linux服务器80端口无法访问问题: 在Linux操作系统下(Ubuntu)撰写好的服务器程序在连接时经常会出现80端口无法访问,卡死在accept之前的情况,如图下图所示。通常按以下步骤排查测试大概率会解决端口无法访问的问题。 排查步...
    99+
    2023-08-19
    服务器 linux tcp/ip
  • docker发布服务无法访问怎么解决
    有几种可能的原因导致无法访问Docker发布的服务: 端口映射问题:确保在运行Docker容器时正确地映射了容器内部的端口到主机...
    99+
    2023-10-27
    docker
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作