热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

docker端口映射及外部无法访问问题

这篇文章主要介绍了docker端口映射及外部无法访问问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

docker容器内提供服务并监听8888端口,要使外部能够访问,需要做端口映射。

docker run -it --rm -p 8888:8888 server:v1

此时出现问题,在虚机A上部署后,在A内能够访问8888端口服务,但是在B却不能访问。

这应该是由于请求被拦截。

一、查看firewall-cmd --state

如果输出的是“not running”则FirewallD没有在运行,且所有的防护策略都没有启动,那么可以排除防火墙阻断连接的情况了。

如果输出的是“running”,表示当前FirewallD正在运行,需要再输入下面的命令查看现在开放了哪些端口和服务:

firewall-cmd --list-ports
firewall-cmd --list-services

解决方案有两种:

1.关闭FirewallD服务:

如果您不需要防火墙,那直接关掉FirewallD服务就好了

systemctl stop firewalld.service

2.添加策略对外打开指定的端口:

比如我们现在要打开对外5000/tcp端口,可以使用下面的命令:

firewall-cmd --add-port=5000/tcp --permanent
firewall-cmd --reload

如果只是临时打开端口,去掉第一行命令中的“--permanent”参数,那么当再次重启FirewallD服务时,本策略将失效。

二、ip转发没有打开

sysctl net.ipv4.ip_forward

显示net.ipv4.ip_forward=0则表示未打开。

三、service iptables打开并拦截了

可关闭service iptables

service iptables stop

若docker run时出现错误:

iptables: No chain/target/match by that name.

则只需重启docker服务即可

service docker restart

 或者:

#设置iptables防火墙为开机启动项 
systemctl enable iptables.service

#启动防火墙使配置文件生效 
systemctl start iptables.service

#停止防火墙 
systemctl stop iptables.service

#重启防火墙使配置文件生效 
systemctl restart iptables.service

最终版本:

启动docker并进行端口映射后,docker会在iptables中添加DNAT规则,将收到的对应端口的包转换ip并进行转发,同时添加规则将所有来自docker网域的ip进行转换。

但是在Centos7上出现docker可以正常访问外网,但是外网发出的请求在经过eth1接收转发后送达不到docker0,或者送到却出现(oui Unknown)的状况。暂时不清楚这到底是为什么经过DNAT后无法送达docker0.

最终解决办法是在启动docker后,重启iptables

service iptables restart

清空docker添加的所有规则,而后添加规则

iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

将所有来自docker的包172.17.0.0/16的ip替换为本机ip并发送,以达到docker访问外网的目的。

到此这篇关于docker端口映射及外部无法访问问题的文章就介绍到这了,更多相关docker端口映射及外部访问内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 深入解析 RuntimeClass 及多容器运行时应用
    本文旨在探讨RuntimeClass的起源、功能及其在多容器运行时环境中的实际应用。通过详细的案例分析,帮助读者理解如何在Kubernetes集群中高效管理不同类型的容器运行时。 ... [详细]
  • Kubernetes 实践指南:初次体验
    本文介绍了如何通过官方提供的简易示例,快速上手 Kubernetes (K8S),并深入理解其核心概念和操作流程。 ... [详细]
  • 微服务自动化.dockercompose
    目录一、docker-compose二、docker-compose安装与配置1、修改docker.service2、下载文件3、将刚才下载的docker-compose文 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • Docker运行中实例端口映射调整方法
    本文探讨了在Docker容器运行期间调整端口映射的方法,包括前期规划与运行时需求变更两种常见场景下的解决方案。 ... [详细]
  • 本文探讨了如何在Docker构建过程中使用动态环境变量,特别是针对Docker v1.9及以上版本的用户。我们将介绍如何声明和使用构建参数,以及这些参数对构建缓存的影响。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文介绍如何在阿里云环境中利用 Docker 容器化技术部署一个简单的 Flask Web 应用,并确保其可通过互联网访问。内容涵盖 Python 代码编写、Dockerfile 配置、镜像构建及容器运行等步骤。 ... [详细]
  • 深入理解Dockerfile及其作用
    Dockerfile是一种文本格式的配置文件,用于定义构建Docker镜像所需的步骤。通过使用`docker build`命令,用户可以将Dockerfile中的一系列指令转换成一个可执行的Docker镜像。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 本文介绍了Linux操作系统的核心组成部分——内核及其版本分类,以及市面上常见的几种Linux发行版,旨在为初学者提供一个清晰的学习路径。 ... [详细]
  • 如何在Mozilla Firefox中调整GIF动画的循环次数
    本文介绍了如何通过调整Mozilla Firefox的高级设置来控制GIF动画的播放次数,帮助用户根据个人喜好自定义浏览体验。 ... [详细]
author-avatar
Larry_He
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有