前段时间使用 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   # 0:未开启,1:已开启
  • 修改 net.ipv4.ip_forward 的值:
sysctl -w net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward

上面的这种方式无需重启,不过也只能算是 临时生效 。它的效果会随着计算机的重启而失效。

  • 永久生效的 ip 转发
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网络模式、 端口映射 或共享文件夹等方法。但需要注意,在使用这些方法时,要考虑安全性和权限 问题 ,以避免潜在的安全风险。