docker开放的端口_docker-5-解决宿主机没有开放81端口却可以直接访问docker启动的81端口nginx容器的问题...
我以为经过前面四篇博文的学习,自己对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容器的问题...相关推荐
- docker网络问题解决办法“大全”:关于宿主机访问不了docker容器中web服务,或者容器内访问不了外网的问题的解决办法
docker网络问题解决办法"大全":关于宿主机访问不了docker容器中web服务,或者容器内访问不了外网的问题的解决办法 参考文章: (1)docker网络问题解决办法&quo ...
- hdfs中8031是什么端口号_在宿主机如何访问docker中hadoop的hdfs:ip:9000啊, 端口映射出来啊...
本人有一个3节点hadoop, 启动了3个docker容器, 众所周知, docker容器内服务的端口是可以映射到宿主机的端口的, 我采用-P将容器的所有端口映射到主机端口, 命令如下: docker ...
- docker连不上宿主机mysql_宿主机连接docker中的mysql
宿主机连接docker中的mysql dokcer安装mysql docker run \ --name mysql \ -v $PWD/mysql:/var/lib/mysql \ -p 3306: ...
- docker如何查看宿主机到容器端口映射
docker/Docker如何查看宿主机到容器端口映射关系 背景 前些天的时候, 在定位问题时发现docker emqx 连接websocket (8083)端口出现异常. 经过很长时间定位, 才发现 ...
- docker删除none镜像_Docker容器相关命令
1.新建并启动容器 使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项. -d选项:表示后台运行 -P选项:随机端口映射 -p选项:指 ...
- docker容器和宿主机的主机名映射失败
一.为什么将 Oracle 部署在 docker容器中 我们首先通过 docker 安装了 oracle11g 版本的 Oracle 数据库--不要问我为什么通过 docker 安装数据库,正确做法或 ...
- 利用 Docker 在不同宿主机做 CentOS 系统容器 | 原力计划
作者 | 于先森2017 责编 | 伍杏玲 出品 | CSDN博客 最近公司新接到一个项目,惯例是通过技术架构.业务需求.用户量还有以往的经验大概评估出一份资源配置表格提供给客户,让客户参考采购的服务 ...
- 查看此docker网络连接模式_Docker:网络模式详解
袖珍指南 Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创 ...
- DOCKER容器与宿主机同网段互相通信
相关阅读: Docker容器时间与宿主机同步 使用Docker搭建WordPress博客 Docker私有仓库搭建及镜像删除 Docker镜像的导入和导出 在Docker上部署Ambari 博主最近在 ...
最新文章
- 深度学习中的欠拟合和过拟合简介
- java 抽象工厂工厂_Java设计模式之简单工厂、工厂方法和抽象工厂
- 【宋红康学习日记3】运算符
- Android开机自启动 .
- 什么甜食可以代表你的家乡?
- webpack2 实践系列(二)— entry 和 output
- css grid随页面大小_CSS中的间距知识总结,前端开发中各种间距的使用及优缺点
- Sublime Text 3已卸载
- acl在内核里的位置_Windows 注入篇 之 内核 APC 注入
- python 黑客书籍 ——扫描+暴力破解
- 自制的JavaScript NodeTree导航栏,纯练手,附源码
- 【数字信号处理】基于matlab GUI频谱分析仪【含Matlab源码 932期】
- amr转换成mp3 java_微信开发-将amr格式转换为mp3格式
- c语言编程中句柄无效怎么解决,Win7玩英雄联盟出现句柄无效怎么解决?
- 如何在网页上添加分享按钮
- 2021全国电子设计大赛 D题 基于互联网的摄像测量系统 源码解析
- android证书转pem,Android签名文件转化为pk8和pem的实现
- js插件开发的一些感想和心得-引狼狼的蓝胖子
- AutoCAD 快捷键
- ubuntu 8000端口被占用
热门文章
- Module build failed: Error: Cannot find module ‘node-sass‘ Require stack报错解决
- vue错误:vue.esm.js?efeb:628 [Vue warn]: Error in render: “TypeError: Cannot read property ‘matched‘ of
- python 整数输出 d f_如何将数字(10,11,12,13,14,15)分配给Python 3中的字母(A,B,C,D,E,F)?...
- 自学java去哪找工作比较好_如何自学java?什么程度可以找工作?
- se是什么职位_女皇大学PSE&SE 独家解析!
- Android面试基础一
- 使用equals判断对象是否相等出现的错误
- MySQL 基础 ———— 存储过程与函数
- 教你如何一篇博客读懂设计模式之—--原型模式
- linux虚拟内存api,Linux虚拟内存空间分布-Go语言中文社区