Docker容器不能联网问题

准确地说,不是不能联网,而是默认模式(bridge)不能,可能我这并不能完全解决docker容器的网络问题,但我确实得到解决,此文章仅供参考。

起因:

    使用Dockerfile文件构建镜像时,会显示无法访问安装包的地址,例如:apt-get update命令执行不了。不使用Dockerfile直接启动并进入容器,发现网络确实无法访问,可以输入curl www.baidu.com确定。但是如果启动命令指定网络模式又可以联网,docker run --network host -it imageid /bin/bash。这个就很奇怪,但是想通过Dockerfile的网络模式却仍不能上网,无论是bridge还是host。

分析:

    主要问题就是网络,而且这个问题并不是docker本身引起的,而是宿主机的问题。

解决:

    通过不断测试和查阅资料,终于在一篇文章中的评论里找到的解决方法。

    关闭防火墙和selinux

操作方法如下:

1、暂时关闭

setenforce 0

2、永久关闭

vi /etc/selinux/config

修改配置项:SELINUX=disabled,默认:#SELINUX=enforcing

# 重启服务器

reboot


被永久关闭的selinux,如果需要重新开启,那么需要手动编辑配置文件。如果直接使用:setenforce 0 将会报错:“setenforce: SELinux is disabled”;

3、重新开启selinux

vi /etc/selinux/config

将配置项:SELINUX=disabled,改为:SELINUX=enforcing 或 SELINUX=permissive

# 重启服务器

reboot

4、selinux的模式
enforcing:强制模式,SELinux 正在运行中,已经在限制 domain/type。
permissive:宽容模式:SELinux 正在运行中,但仅发出警告信息,并不会实际限制 domain/type 的存取(permissive模式可以用在测试环境中供调试规则时使用)。
disabled:关闭,SELinux 不再运行。
5、selinux状态查看
5.1 方式1
# 查看当前的运行模式

getenforce

5.2 方式2
# 可以查看selinux的概要状态信息

sestatus

5.3 方式3
# 可以查看selinux的详情状态信息

sestatus -v

6、关闭防火墙
6.1 临时关闭防火墙
# 临时关闭防火墙

systemctl stop firewalld.service
# 或者
systemctl stop firewalld

6.2 永久关闭防火墙
# 永久关闭防火墙(必须先临时关闭防火墙,再执行该命令,才能行永久关闭)

systemctl disable firewalld.service
# 或者
systemctl disable firewalld

6.3 开启防火墙(永久关闭的防火墙)
# 开启防火墙

systemctl enable firewalld.service
# 或者
systemctl enable firewalld


 

你可能感兴趣的:(Docker,docker,容器,linux)