前段时间使用 Docker 装了 GitLab,SSH 配置都已经配置完毕,容器端口和宿主机端口也映射完毕。Firewall 和 SELinux 也已经关闭。
1、在宿主机上访问对应的端口使用 SSH 拉取 GitLab 上的代码
正常
2、在容器中访问容器中对应 SSH 的端口
正常
3、在外部网络访问 Docker 宿主机的对应端口使用 SSH 拉取代码
异常
这是因为我的宿主机没有开启
ip 转发
功能,导致外部网络访问宿主机对应端口是没能转发到 Docker Container 所对应的端口上。
这里记录一下:Linux 发行版默认情况下是不开启
ip 转发
功能的。这是一个好的做法,因为大多数人是用不到 ip 转发的,但是如果我们架设一个 Linux 路由或者 VPN 服务我们就需要开启该服务了。
在 Linux 中开启 ip 转发的内核参数为:
net.ipv4.ip_forward
,查看是否开启 ip转发:
cat /proc/sys/net/ipv4/ip_forward
-
修改
net.ipv4.ip_forward
的值:
sysctl -w net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward
上面的这种方式无需重启,不过也只能算是
临时生效
。它的效果会随着计算机的重启而失效。
vim /etc/sysctl.conf # 在此文件中新增 "net.ipv4.ip_forward = 1",保存退出
# 立即生效
sysctl -p /etc/sysctl.conf
# 在红帽发行版的 Linux 系统中也可以通过重启网卡来立即生效
service network restart # CentOS 6
systemctl restart network # CentOS 7
# 而在 debian/ubuntu 系列的发行版则用
/etc/init.d/procps.sh restart
问题描述原因解决问题问题描述 前段时间使用 Docker 装了 GitLab,SSH 配置都已经配置完毕,容器端口和宿主机端口也映射完毕。Firewall 和 SELinux 也已经关闭。 1、在宿主机上访问对应的端口使用 SSH 拉取 GitLab 上的代码正常 2、在容器中访问容器中对应 SSH 的端口正常 3、在外部网络访问 Dock...
在Ubuntu中设置
Docker
镜像
端口映射
,在服务器本机可以访问,但是在外网就
无法访问
,已经开放 ufw
端口
,
docker
映射也没有用,后发现在是使用的自建
Docker
网络的原因,
docker
内设网络的网段和网关不要和物理机网关和网段有重复的,会产生
无法访问
的现象,将网段和网关设为非重复的,重启
docker
和 ufw ,
问题
解决.
任意主机访问容器,或者主机内其他容器访问这个容器 都是
外部
访问。
因此在容器内的容器监听
端口
时候 如果监听的是 localhost/127.0.0.1:xxx 的话,即使是将这个xxx
端口映射
到host主机了,对容器内来说,也不是localhost访问,也是
外部
访问,这点要注意。
创建一个
docker
容器,并进行
端口映射
。容器启动后,在部署容器的主机上可以访问映射
端口
,但是其他主机
无法访问
。
问题
排查
出现上述情况,应是请求被拦截。出现该
问题
的可能是由于firewall配置异常、
ip
转发
关闭、
ip
tables服务拦截了请求
排查firewall
(1) 使用firewall-cmd --state查看防火墙运行情况
如果防火墙处于not running,则可以排除...
在安装了一个Windows下安装了
docker
,并尝试在其中运行Nginx、owncloud等服务,但映射完毕之后,在主机的浏览器中,打开localhost:port
无法访问
对应
的服务。
用百度尝试了下,始终找不到答案,难道这个
问题
大家都没遇到过么?于是使用Google,并用英文检索,一会就找到了
对应
的答案。
The reason you’re having this, is be
Docker
是一种虚拟化技术,它允许创建容器来运行应用程序。当
Docker
容器运行时,它有一个独立的文件系统和网络环境。通常情况下,
Docker
容器是隔离的,没有直接访问
宿主机
的权限。如果要访问
宿主机
上的服务,可以使用以下几种方式:
1. 使用host网络模式:在创建
Docker
容器时,通过指定--net host参数,就可以使容器使用
宿主机
的网络,这样就可以直接访问
宿主机
上的服务。
2. 使用
端口映射
:在创建
Docker
容器时,可以使用-p参数指定将容器内的
端口映射
到
宿主机
上。例如,将容器内的80
端口映射
到
宿主机
上的8080
端口
,就可以使用http://
宿主机
ip
:8080来访问容器内的应用程序。
3. 使用共享文件夹:在创建
Docker
容器时,可以使用-v参数指定将
宿主机
上的文件夹挂载到容器内,这样就可以在容器内访问
宿主机
上的文件。例如,将
宿主机
上的/data目录挂载到容器内的/mnt/data目录,就可以在容器内访问
宿主机
上/data目录中的文件。
总之,要访问
宿主机
上的服务,可以使用host网络模式、
端口映射
或共享文件夹等方法。但需要注意,在使用这些方法时,要考虑安全性和权限
问题
,以避免潜在的安全风险。