我以为经过前面四篇博文的学习,自己对docker的了解最起码入门了,但是当我用docker启动一个81端口的nginx后(宿主机:容器/81:80),在宿主机的firwall防火墙没有添加81端口的情况下,竟然可以直接访问成功,然后试下docker运行mysql容器用3308端口,发现也是在firwall没有添加端口的情况下,仿佛绕过了防火墙可以直接访问到容器,当时就懵逼了…

环境CentOS7

firewall

docker

nginx

解决流程

1、以为是docker和firewall的启动顺序问题导致的

开始我以为是因为我先启动docker后面重启了firewall导致firewall不能够监控docker,然后我还美滋滋的觉得终于找到问题了。最后发现,太天真了,启动顺序完全没影响。

2、宿主机的防火墙和docker容器的防火墙冲突

后面我想到docker也是一个轻量级的linux操作系统,也有自己的防火墙,会不会是因为docker启动自己的防火墙后,权限级别直接绕过了宿主机的防火墙,因此百度了很多,后面按照网上的说法启动容器的时候加上—iptables=false,这样可能就关闭掉了容器的iptables防火墙,然而经过尝试并没有什么用,而且好像第二次启动容器直接就启动不了了,报什么iptables错误

3、直接修改配置文件不使用docker的iptables防火墙

因为我现在的操作系统是CentOS7,所以宿主机用的是firewall,而docker用的是iptables,百度查找说需要在文件/etc/default/docker中添加如下内容

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --iptables=false"

然后我美滋滋的跟着执行,发现这个文件根本不存在,因此我又直接新建这个文件,保存,接着执行如下两条命令重新加载文件和重启docker

#重载

systemctl daemon-reload

#重启docker服务

service docker restart

启动容器,重新访问,喵的,还是可以直接访问,仿佛这个配置文件完全没有用

然后直接百度,发现需要在文件/usr/lib/systemd/system/docker.service中添加如下配置,一下是我的文件

[Unit]

Description=DockerApplicationContainerEngine

Documentation=https://docs.docker.com

BindsTo=containerd.service

After=network-online.target firewalld.service containerd.service

Wants=network-online.target

Requires=docker.socket

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd-H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS

ExecReload=/bin/kill-s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

EnvironmentFile=-/etc/default/docker

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.

# Both the old, and new location are accepted by systemd 229 and up, so using the old location

# to make them work for either version of systemd.

StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.

# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make

# this option work for either version of systemd.

StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Comment TasksMax if your systemd version does not supports it.

# Only systemd 226 and above support this option.

TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

[Install]

WantedBy=multi-user.target

a、添加配置文件,(-代表ignore error)EnvironmentFile=-/etc/default/docker

b、在ExecStart后面添加如下内容$DOCKER_OPTS

虽然搞不懂为什么,反正接下来修改完/etc/default/docker

后重载重启

#重载

systemctl daemon-reload

#重启docker服务

service docker restart

重新启动nginx容器,我的天,终于不能访问了。

执行如下命令开启81端口

firewall-cmd--zone=public--add-port=81/tcp--permanent

firewall-cmd--reload

我的天,终于可以访问了,测一下docker启动mysql的访问,也被firewall拦截了。

真是要命的东西

结语

虽然最终解决了,但是具体原理并不是太过明了,但是最起码docker启动的容器再也不会绕过firewall的限制,服了。

docker开放的端口_docker-5-解决宿主机没有开放81端口却可以直接访问docker启动的81端口nginx容器的问题...相关推荐

  1. docker网络问题解决办法“大全”:关于宿主机访问不了docker容器中web服务,或者容器内访问不了外网的问题的解决办法

    docker网络问题解决办法"大全":关于宿主机访问不了docker容器中web服务,或者容器内访问不了外网的问题的解决办法 参考文章: (1)docker网络问题解决办法&quo ...

  2. hdfs中8031是什么端口号_在宿主机如何访问docker中hadoop的hdfs:ip:9000啊, 端口映射出来啊...

    本人有一个3节点hadoop, 启动了3个docker容器, 众所周知, docker容器内服务的端口是可以映射到宿主机的端口的, 我采用-P将容器的所有端口映射到主机端口, 命令如下: docker ...

  3. docker连不上宿主机mysql_宿主机连接docker中的mysql

    宿主机连接docker中的mysql dokcer安装mysql docker run \ --name mysql \ -v $PWD/mysql:/var/lib/mysql \ -p 3306: ...

  4. docker如何查看宿主机到容器端口映射

    docker/Docker如何查看宿主机到容器端口映射关系 背景 前些天的时候, 在定位问题时发现docker emqx 连接websocket (8083)端口出现异常. 经过很长时间定位, 才发现 ...

  5. docker删除none镜像_Docker容器相关命令

    1.新建并启动容器 使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项. -d选项:表示后台运行 -P选项:随机端口映射 -p选项:指 ...

  6. docker容器和宿主机的主机名映射失败

    一.为什么将 Oracle 部署在 docker容器中 我们首先通过 docker 安装了 oracle11g 版本的 Oracle 数据库--不要问我为什么通过 docker 安装数据库,正确做法或 ...

  7. 利用 Docker 在不同宿主机做 CentOS 系统容器 | 原力计划

    作者 | 于先森2017 责编 | 伍杏玲 出品 | CSDN博客 最近公司新接到一个项目,惯例是通过技术架构.业务需求.用户量还有以往的经验大概评估出一份资源配置表格提供给客户,让客户参考采购的服务 ...

  8. 查看此docker网络连接模式_Docker:网络模式详解

    袖珍指南 Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创 ...

  9. DOCKER容器与宿主机同网段互相通信

    相关阅读: Docker容器时间与宿主机同步 使用Docker搭建WordPress博客 Docker私有仓库搭建及镜像删除 Docker镜像的导入和导出 在Docker上部署Ambari 博主最近在 ...

最新文章

  1. 深度学习中的欠拟合和过拟合简介
  2. java 抽象工厂工厂_Java设计模式之简单工厂、工厂方法和抽象工厂
  3. 【宋红康学习日记3】运算符
  4. Android开机自启动 .
  5. 什么甜食可以代表你的家乡?
  6. webpack2 实践系列(二)— entry 和 output
  7. css grid随页面大小_CSS中的间距知识总结,前端开发中各种间距的使用及优缺点
  8. Sublime Text 3已卸载
  9. acl在内核里的位置_Windows 注入篇 之 内核 APC 注入
  10. python 黑客书籍 ——扫描+暴力破解
  11. 自制的JavaScript NodeTree导航栏,纯练手,附源码
  12. 【数字信号处理】基于matlab GUI频谱分析仪【含Matlab源码 932期】
  13. amr转换成mp3 java_微信开发-将amr格式转换为mp3格式
  14. c语言编程中句柄无效怎么解决,Win7玩英雄联盟出现句柄无效怎么解决?
  15. 如何在网页上添加分享按钮
  16. 2021全国电子设计大赛 D题 基于互联网的摄像测量系统 源码解析
  17. android证书转pem,Android签名文件转化为pk8和pem的实现
  18. js插件开发的一些感想和心得-引狼狼的蓝胖子
  19. AutoCAD 快捷键
  20. ubuntu 8000端口被占用

热门文章

  1. Module build failed: Error: Cannot find module ‘node-sass‘ Require stack报错解决
  2. vue错误:vue.esm.js?efeb:628 [Vue warn]: Error in render: “TypeError: Cannot read property ‘matched‘ of
  3. python 整数输出 d f_如何将数字(10,11,12,13,14,15)分配给Python 3中的字母(A,B,C,D,E,F)?...
  4. 自学java去哪找工作比较好_如何自学java?什么程度可以找工作?
  5. se是什么职位_女皇大学PSE&SE 独家解析!
  6. Android面试基础一
  7. 使用equals判断对象是否相等出现的错误
  8. MySQL 基础 ———— 存储过程与函数
  9. 教你如何一篇博客读懂设计模式之—--原型模式
  10. linux虚拟内存api,Linux虚拟内存空间分布-Go语言中文社区