在CentOS 7上当我们以类似下列命令将主机端口与容器端口映射时可能遇到无法访问容器服务的问题

docker run --name web_a -p 192.168.1.250:803:80 -d web_a:beta1.0.0 .

由于docker在执行此命令时,是向iptables注入了一条规则将主机803映射到容器80端口,但是CentOS 7中以firewalld服务替代了iptables。因此,上述命令的端口映射不会生效。

解决方法:首先观察一下主机上的网卡信息,确认增加了一个docker0的虚拟网卡:

[root@localhost /home]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:5cff:fe0e:82f9 prefixlen 64 scopeid 0x20<link>
ether 02:42:5c:0e:82:f9 txqueuelen 0 (Ethernet)
RX packets 1288 bytes 1561177 (1.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1594 bytes 108755 (106.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.250 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::76f4:9aea:4973:ec6c prefixlen 64 scopeid 0x20<link>
inet6 240e:379:542:2800:8844:77ba:78dd:7 prefixlen 128 scopeid 0x0<global>
inet6 240e:379:542:2811:3ead:218:ba68:38e6 prefixlen 64 scopeid 0x0<global>
ether 74:d4:35:09:93:19 txqueuelen 1000 (Ethernet)
RX packets 10166908 bytes 1221399579 (1.1 GiB)
RX errors 0 dropped 3014 overruns 0 frame 0
TX packets 982334 bytes 427296782 (407.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 18 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 1833650 bytes 450567722 (429.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1833650 bytes 450567722 (429.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vethecef228: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::f425:f1ff:fe82:9c19 prefixlen 64 scopeid 0x20<link>
ether f6:25:f1:82:9c:19 txqueuelen 0 (Ethernet)
RX packets 234 bytes 1520113 (1.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 613 bytes 39809 (38.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

使用如下命令确认容器实例得到的虚拟ip:

docker inspect web_a

假设容器中的ip为172.17.0.2,接下来我们要为此IP做个NAT转发规则,并让firewalld服务处理此规则:

#主机端口请求转发到容器(容器中的服务不要监听localhost而要监听容器分配的虚拟IP或者以0.0.0.0替代)
firewall-cmd --permanent --zone=public --add-masquerade 启用端口NAT转发
#将主机803端口请求转发到容器上的80端口
firewall-cmd --add-forward-port=port=803:proto=tcp:toaddr=172.17.0.2:toport=80 --permanent
#重载规则
firewall-cmd --reload
#列出所有规则
firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp2s0
sources:
services: ssh dhcpv6-client
ports: 3306/tcp 80/tcp 21/tcp 5000/tcp 6379/tcp 900/tcp 801/tcp 802/tcp 6000/tcp 5002/tcp 90/tcp 9092/tcp 81/tcp 803/tcp
protocols:
masquerade: yes
forward-ports: port=803:proto=tcp:toport=80:toaddr=172.17.0.2
source-ports:
icmp-blocks:
rich rules:
#重新启动docker
systemctl restart docker
#重新启动容器
docker start web_a

经上述操作,就能以主机IP:803访问容器上的80端口的服务,并不需要关闭firewalld(很多网上的结论是换成iptables服务,实测不需要)。

在CentOS 7 上为docker配置端口转发以兼容firewall的更多相关文章

  1. Mac上通过docker配置PHP开发环境

    这篇文章介绍的内容是关于Mac上通过docker配置PHP开发环境,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 更多PHP相关知识请关注我的专栏PHP​zhuanlan.zhihu. ...

  2. 在windows上用netsh动态配置端口转发

    使用多个虚拟机,将开发环境和工作沟通环境分开(即时通,办公系统都只能在windows下使用…),将开发环境的服务提供给外部访问时,需要在主机上通过代理配置数据转发. VirtualBox提供了端口转发 ...

  3. 在Centos 7上安装Docker

    在Centos 7上安装Docker 1.docker介绍 docker是类似于vmware的虚拟化软件,可以开发.容纳.运行应用程序的平台,在容器中安全的隔离运行应用程序. 2.Docker引擎 D ...

  4. 在 CentOS 7上安装并配置 Python 3.6 环境

    前言 按照此方法安装保证以下报错什么的统统都没有! 基础环境 系统:centos7.4 软件:python3 Retrying (Retry(total=0, connect=None, read=N ...

  5. Windows下Nginx的安装与使用(一):配置端口转发

    什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口.此时如果我们可以通过: localhost:8001 //图书 lo ...

  6. 【Windows】netsh动态配置端口转发

    文章转载自傲风 使用多个虚拟机,将开发环境和工作沟通环境分开(即时通,办公系统都只能在windows下使用-),将开发环境的服务提供给外部访问时,需要在主机上通过代理配置数据转发. VirtualBo ...

  7. windows下nginx中配置端口转发 ----本文来自转载

    什么是端口转发 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 转载原文链接:https://www.cnblogs.com/chanshuyi/ ...

  8. RHEL7配置端口转发和地址伪装

    说明:这里是Linux服务综合搭建文章的一部分,本文可以作为Linux上使用firewalld做端口转发和地址伪装以及外网访问内网的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭 ...

  9. [转载]Linux上使用ssl进行端口转发

    原文地址:Linux上使用ssl进行端口转发 作者:呼延十 背景介绍 作为一个后端程序员,经常要和别人联调接口,每当这时,总是被公司的各种,dev,qa,pre,prod环境搞得头疼,,,我真的只是想 ...

随机推荐

  1. Java 从入门到进阶之路(二十七)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection,本章我们来看一下 Java 集合框架中的 Map. Map 接口定义的集合又称查找表,用于存储所谓“Key-Value” ...

  2. 堆/题解 P3378 【【模板】堆】

    概念: 堆就是一颗二叉树,满足父亲节点总是比儿子节点大(小).因此,堆也分为大根堆和小根堆,大根堆就是父亲节点比儿子节点大,小根堆正好相反.注意加粗的地方,是每一个节点哦!!!!! 还是直接看例题吧, ...

  3. crm项目开发之架构设计

    CRM customer relationship management 客户管理系统 1. 干什么用的? 管理客户 维护客户关系 2. 谁去使用? 销售 班主任 项目经理 3. 需求: 1. 登录 ...

  4. YOLO-V3实战(darknet)

    一. 准备工作 1)实验环境: darknet 是由 C 和 CUDA 开发的,不需要配置其他深度学习的框架(如,tensorflow.caffe 等),支持 CPU 和 GPU 运算,而且安装过程非 ...

  5. Python3笔记015 - 3.6 空语句

    第3章 流程控制语句 3.6 空语句 # pass 占位符,暂时不做任何事情,方便后面补充功能 for i in range(1,10): if i%2 == 0: print(i, end = '' ...

  6. 资深前端工程师带你认识网页后缀html、htm、shtml、shtm有什么区别?

    每一个网页或者说是web页都有其固定的后缀名,不同的后缀名对应着不同的文件格式和不同的规则.协议.用法,最常见的web页的后缀名是.html和.htm,但这只是web页最基本的两种文件格式,今天我们来 ...

  7. Java实现 第十一届蓝桥杯——走方格(渴望有题目的大佬能给小编提供一下题目,讨论群:99979568)

    走方格 问题描述在平面上有一些二维的点阵. 这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,从左到右依次为第1 至第 m 列,每一个点可以用行号和列号来表示. 现在有个人站在第 ...

  8. (二)ELK Filebeat简介

    Filebeat简介   轻量级的日志传输工具,是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且 ...

  9. How many ways??,题解

    题目: 题意: 找过k条边的路径个数. 分析: 首先注意一下题意,同一个点过两次算两次,做过类似的,过k条边的最短路,只要搞一个矩阵,然后快速幂就好了,这个也一样,维护信息变一下,然后就好了. 如果k ...

  10. 使用@AutoConfigureBefore、After、Order调整Spring Boot自动配置顺序

    前言 Spring Boot是Spring家族具有划时代意义的一款产品,它发展自Spring Framework却又高于它,这种高于主要表现在其最重要的三大特性,而相较于这三大特性中更为重要的便是Sp ...