docker端口映射无法访问的解决

docker端口映射无法访问的解决表现systemctlstatusdocker,显示正常,可以pull,push,build宿主机访问外网没问题,可以连上ubuntu的阿里的源运行容器映射的端口在本机无法访问,用curl127.0.0.1:端口,显示:curl:(56)Recvfailure:Connectionresetbypeerdockerbuild的时候,使用apt-getinstallxx,无法访问,哪怕镜像源是国内的阿里之类的.在改为dockerbuild–networkho

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

表现

  • systemctl status docker,显示正常,可以pull,push,build
  • 宿主机访问外网没问题,可以连上ubuntu的阿里的源
  • 运行容器映射的端口在本机无法访问,用curl 127.0.0.1:端口,显示:
    curl: (56) Recv failure: Connection reset by peer
    
  • docker build的时候,使用apt-get install xx,无法访问,哪怕镜像源是国内的阿里之类的.
    在改为 docker build –network host后又可以了

原因:

docker的网桥出问题了,导致映射端口无效,docker run -d -p 8080:80, 非常确定容器内的应用正常启动,curl 127.0.0.1:8080失败

验证问题:

用于验证的镜像

  • 也可以直接下载已经写好的镜像: simple_server,直接验证

  • 用golang编写一个简单的http服务,编译为simple_server

    package main
    
    import (
    	"flag"
    	"fmt"
    	"net/http"
    )
    
    func indexHandler(w http.ResponseWriter, r *http.Request) { 
         
    	fmt.Fprintf(w, "hello world")
    }
    
    func main() { 
         
    	var port int
    	flag.IntVar(&port, "p", 8080, "端口号,默认为8080")
    	flag.Parse()
    	fmt.Println("监控在端口", port)
    	http.HandleFunc("/", indexHandler)
    	err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
    	if err != nil { 
         
    		fmt.Println("错误: ", err)
    	}
    }
    
    
  • 编写Dockerfile

    FROM ubuntu
    RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse \n\
    deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse \n\
    deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse \n\
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse \n\	
    deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse \n\
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse \n\
    deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse \n\
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse \n\
    deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse \n\
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse '>/etc/apt/sources.list
    
    RUN apt-get update -y
    RUN apt-get install curl -y
    
    COPY simple_server /home/
    CMD ["/home/simple_server", "-p", "80"]
    
  • 放在同一个目录,并执行: docker build . --network host -t simple_server, 目录:

    [root@ tmp]# tree server
    server
    ├── Dockerfile
    └── simple_server
    0 directories, 2 files
    

运行容器进行验证

  • 运行:docker run -d -p 8080:80 simple_server
  • 进入容器运行: curl 127.0.0.1, 成功打印:hello world
  • 在宿主机上运行: curl 127.0.0.1:8080, 一直卡住,然后报no route 之类的错误

解决

参考: 通过重建 docker0 网络解决问题

  • 下面的这些命令是在ubuntu20上执行的,可以参照你自己的操作系统做出修改
  • systemctl stop docker # 停止docker 服务
  • pkill docker # 杀掉docker进程
  • iptables -t nat -F # 清理iptables
  • ip link set docker0 down # 停止docker0网卡
  • brctl delbr docker0 # 删除docker0网卡
  • systemctl start docker # 启动docker服务
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180860.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Docker安装Rabbitmq3.8.7[通俗易懂]

    Docker安装Rabbitmq3.8.7[通俗易懂]Docker环境下安装Rabbitmq一、简介什么是rabbitmq:RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一个AdvancedMessageQueuingProtocol(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成。官网地址:https://www.rabbitmq.com/二、环境准备LInux环境:Centos7Docker版本:17.12.0-ce预装MQ版本:3.8.7SS

  • es集群搭建_k8s和docker搭建es集群

    es集群搭建_k8s和docker搭建es集群单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。ES集群搭建_使用docker-海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点-单点故障问题:将分片数据在不同节点备份(replica)ES集群介绍为什么需要集群ES集群相关概念搭建ES集群集群职责划分集群脑裂问题…

    2022年10月12日
  • docker容器获取宿主机IP「建议收藏」

    docker容器获取宿主机IP「建议收藏」1.bridge模式启动.通过环境变量–envHOST_IP=xxxx,通过环境变量$HOST_IP获取将主机/proc目录挂载到容器中(未验证)2.host模式启动通过iproute获取

  • docker前端独立部署_前后端分离静态资源部署

    docker前端独立部署_前后端分离静态资源部署提示:本次部署采用centos7服务器,使用nginx进行反向代理,运行docker容器完成上线。小白看完这篇都会了!

    2022年10月11日
  • docker 上传本地镜像_不同docker仓库镜像同步

    docker 上传本地镜像_不同docker仓库镜像同步前言之前通过docker搭建过jenkins+python3环境,如果想要在不同的机器上搭建一样的环境,就可以将之前搭建的镜像上传到镜像仓库,这样方便在不同的机器上快速搭建同一套环境。如果公开的话

  • Docker镜像相关命令

    Docker镜像相关命令1、查看docker版本 docker version 2、列出本地主机上的镜像: docker images REPOSITORY:表示镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小3、查询镜像 docker search 镜像名称…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号