docker 突然不能被外网访问的解决方案

根据大佬们的方法,找到了原因 sysctl net.ipv4.ip_forward. 腾讯云提示修复漏洞,执行完他们的脚本, ip转发就被关掉了。

后来研究了一下,可以通过 docker info 找到问题所在。

并且可以查看到docker给出一警告

解决方法:

sudo vim /etc/sysctl.conf 修改 ,保存 , 然后 systemctl restart network

或者

sysctl -w net.ipv4.ip_forward=1

但是这样处理可能服务器重启以后就失效了?

还有两个警告,一起处理一下就好了。

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

补充:docker网络问题,在docker容器内无法ping通宿主机的外网ip,可以ping通其他机器的外网ip

问题说明

机器A和机器B 都各自有自己的内网IP和外网IP,例如:A-IP-内、A-IP-外

B-IP-内、B-IP-外,A机器有一个域名www.xxx.com

在A机器上安装jenkins的docker容器,启动后,进入容器

#docker exec -it jenkins /bin/sh
然后在容器内 ping宿主机A的内网IP,可以ping通
#ping A-IP-内(172.16…) //返回可以ping通
#ping A-IP-外(202.106…) //ping不通
#ping www.xxx.com //可以被正确解析为A机的外网IP,但ping不通
#ping baidu.com //可以ping通

另外:

1.在docker容器外的宿主机A机 ping A-IP-外(202.106…)是通的。

2.在B机器上安装jenkins容器,在容器内ping A-IP-外(202.106…) 是通的。

2.在B机器上安装jenkins容器,在容器内ping B-IP-外(202.106…) 是不通的。

查找各类网络问题,删除容器、镜像、重装docker都不起作用。

总之:在docker容器内ping宿主机本身的公网IP怎么也ping不同

我需要在A机的容器内 ping www.xxx.com 内被解析为A机器的内网地址。

因为容器内可以ping通A机的内网地址。

新修改docker-compose文件

extra_hosts:
- " www.xxx.com:172.16.xxx.A"

重建docker容器后,进入docker容器

#ping A-IP-外(202.106…) //正确ping通,OK满足要求

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • docker容器访问宿主机的MySQL操作

    背景: 有一个flask项目提供接口,使用docker容器构建并且运行,MySQL在宿主机运行,需要在容器中可以让flask连接上宿主机的mysql 使用ifconfig命令可以看到,有一个docker0和eth0,在docker容器中可以通过eth0的IP地址加上端口号(3306)这样就可以连接上宿主机的MySQL了:另外,nginx可以通过docker0的IP地址加上构建容器时指定的端口号进行访问容器. 补充:docker的mysql容器运行正常,但是宿主机却连不上数据库,解决方法来啦 do

  • Docker开启远程访问的实现方式

    Docker守护进程套接字 Docker守护进程可以通过三种不同类型的套接字监听Docker Engine API请求:unix.tcp和fd. 默认情况下,在/var/run/docker.sock处创建一个unix域套接字(或IPC套接字),需要root权限或docker组成员身份. 如果需要远程访问Docker守护进程,则需要启用tcp套接字.请注意,默认设置提供了对Docker守护进程的未加密和未经身份验证的直接访问,应该使用内置的HTTPS加密套接字或在其前面放置一个安全的web代理来

  • docker 容器自定义 hosts 网络访问操作

    在 docker-compose.yml 中增加 extra_hosts 关键字就可以将数据写入到容器的 /etc/hosts. extra_hosts 添加主机名映射. extra_hosts: "somehost:162.242.195.82" "otherhost:50.31.209.229" 将会在/etc/hosts创建记录: 162.242.195.82 somehost 50.31.209.229 otherhost 注意: 如果指向的是本机,不要写容

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

    docker容器内提供服务并监听8888端口,要使外部能够访问,需要做端口映射. docker run -it --rm -p 8888:8888 server:v1 此时出现问题,在虚机A上部署后,在A内能够访问8888端口服务,但是在B却不能访问. 这应该是由于请求被拦截. 一.查看firewall-cmd --state 如果输出的是"not running"则FirewallD没有在运行,且所有的防护策略都没有启动,那么可以排除防火墙阻断连接的情况了. 如果输出的是"

  • Docker容器开jupyter不能访问到的解决方法

    在本项目中使用了docker容器搭建环境,Dockerfile 如下: FROM tensorflow/tensorflow:1.14.0-gpu-py3 RUN pip install scipy==1.3.3 RUN pip install requests RUN pip install Pillow RUN pip install matplotlib RUN pip install pandas RUN pip install keras==2.2.4 RUN pip install

  • Docker方式启动tomcat访问首页出现404错误

    场景: 在docker启动tomcat(版本是从阿里云上拉下的:8.5.50)时,访问tomcat首页时出现404错误,在网上找了许多教程,也没有解决,最后在视频讲解中查看到了问题(不知道是不是我拉下来版本的问题) 具体情况: 使用命令: docker exec -it 运行的tomcat容器ID /bin/bash 进入到tomcat的目录 进入webapps文件夹,发现里面是空的(tomcat默认的欢迎页面实际上放在的路径应该是:webapps/ROOT/index.jsp或者index.h

  • docker镜像访问本地elasticsearch端口操作

    使用docker stack部署的镜像服务,进入镜像之后,理论上,应该可以通过下面的指令访问本地的elasticsearch服务 curl 本机ip/9200 但是却提示拒绝访问. 后来本机使用上述指令查看之后发现,本机也是拒绝访问. 之后发现,9200端口的elasticsearch服务,是通过打洞的方式连接的远程服务器上的elasticsearch服务,只能通过下面指令访问端口 curl 127.0.0.1:9200 如果想要通过本机ip访问9200端口,则需要在打洞指令的后面加上 -g.

  • docker 突然不能被外网访问的解决方案

    根据大佬们的方法,找到了原因 sysctl net.ipv4.ip_forward. 腾讯云提示修复漏洞,执行完他们的脚本, ip转发就被关掉了. 后来研究了一下,可以通过 docker info 找到问题所在. 并且可以查看到docker给出一警告 解决方法: sudo vim /etc/sysctl.conf 修改 ,保存 , 然后 systemctl restart network 或者 sysctl -w net.ipv4.ip_forward=1 但是这样处理可能服务器重启以后就失效了

  • 怎样设置才能允许外网访问MySQL

    设置mysql服务允许外网访问,修改mysql的配置文件,有的是my.ini,有的是my.cnf[linux]. 1:设置mysql的配置文件      /etc/mysql/my.cnf      找到 bind-address  =127.0.0.1  将其注释掉://作用是使得不再只允许本地访问:   重启mysql:/etc/init.d/mysql restart; 2:登录mysql数据库:mysql -u root -p mysql> use mysql;   查询host值: m

  • Mysql允许外网访问设置步骤

    1.打开mysql.exe(MySQL Command Line Client),输入密码 2.输入:use mysql; 3.查询host输入: select user,host from user; 4.创建host(如果有"%"这个host值,则跳过这一步) 如果没有"%"这个host值,就执行下面这两句: mysql> update user set host='%' where user='root'; mysql> flush privile

  • Apache2.4.x版wampserver本地php服务器如何让外网访问及启用.htaccess

    Apache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化,以前是将 deny from all 全部改成 Allow from all 实现外网访问,现在是将 Require all denied 以及 Require local 都该为 Require all granted 就可以了. .htaccess 如果不起作用将 LoadModule rewrite_module modules/mod_rewrite.so 前面的注释(#)去掉就

  • 详解阿里云Linux启动tomcat并能外网访问

    问题描述: 先描述一下我的心路历程吧,新买了阿里云服务器,由于需求不是很大,只是为了备案,所以买了个最低配的,而且是Windows server2012的.那现在需要做的是在这个乞丐版的server上,第一个比较恶心的问题,阿里云能卖个Windows server的,却安装不上一个IIS,真是醉了.一安装就提示存储空间不足.那好不用windows了,我换成Linux,但是这个Linux我选择的系统是CentOS 6.5 64位,这个是之前买的直接能用的,就是什么都不用修改的,直接的默认页面是能通

  • VMware下配置Linux系统局域网和外网访问图文教程

    要使用Linux系统很重要的一个操作就是使Linux系统能够访问互联网,只有Linux系统能够访问互联网才能够去下载很多自己所需要的资源,如果不能访问互联网那么使用Linux系统往往会卡在这一步,假设你装的是一个minimal版本的CentOS,那么很多Linux系统下面的工具都是没有被安装的,这个时候如果不能访问互联网,你会感觉特别的蛋疼,因为很多工具都没法下载以及安装,那么,今天小编就给大家分享一下如何在VMware下配置Linux系统成功访问局域网和外网. 第一步:打开VMware虚拟机,

  • mongodb禁止外网访问及添加账号的操作方法

    那么我将从两个方面提高mongo数据库的安全防护系数 1.设置mongodb外网禁止访问 启动数据库时,额外添加--bind_ip 127.0.0.1即可  ./mongod --bind_ip 127.0.0.1 --dbpath /data/db --auth 也可以通过修改/etc/mongod.conf文件添加一行代码 #只监听本地接口,多个接口用,隔开 bind_ip = 127.0.0.1 2.为数据库设置账号密码登录权限 为了保证数据库需要账号密码才能连接,那么在启动数据库的时候需

  • Linux安装mysql并配置外网访问的实例

    配置步骤 1.查看是否配置DNS 如果没有配置DNS参照前文配置DNS 配置相关 如果没有配置DNS yum命令找不到Linux软件库的 DNS配置免费的 DNS1=114.114.114.114即可,也可以加一个备用的DNS2=119.29.29.29 2.用yum安装mysql yum -y install mysql mysql-server mysql-dev 这里用yum 进行-y 同意操作,后面的三个软件分别是mysql, mysql-server,mysql-dev无关顺序 3.启

  • mysql 开放外网访问权限的方法

    如下所示: 主要执行授权命令: 两种方式 1. 允许任意主机以用户bd和密码bdpw连接到local服务器 mysql> GRANT ALL PRIVILEGES ON *.* TO 'bd'@'%' IDENTIFIED Y 'bdpw' WITH GRANT OPTION; mysql> flush privileges; 2. 允许特定的IP地址以用户bd和密码bdpw连接到local服务器 mysql> GRANT ALL PRIVILEGES ON *.* TO 'bd'@'1

  • 设置Mysql5.6允许外网访问的详细流程分享

    最近部署mysql5.6,发现默认mysql只允许本地提供服务,如果要进行若干配置,记录如下. 一.设置MySQL服务允许外网访问 修改mysql的配置文件,有的是my.ini(windows),有的是my.cnf(linux), 在配置文件中增加 [mysqld] port=3306 bind-address=0.0.0.0 然后重新启动mysql服务,执行service mysql restart. 二.设置mysql用户支持外网访问 需要使用root权限登录mysql,更新mysql.us

随机推荐