非宿主机外部访问docker容器问题

本文介绍了一种复杂的网络配置场景,即如何使非宿主机能够访问位于不同网段的Docker容器。通过详细说明实验环境搭建过程及遇到的问题,探讨了实现跨网段访问的技术细节。

非宿主机外部访问docker容器问题

6月19日沈阳源创会,期待您的报名参与>>> »  

简单介绍一下我的环境:
1、docker宿主机(os:centos7, ip:192.168.0.100)

2、宿主机中用brctl新建一个虚拟网桥bridge0(brctl addbr bridge0),并分配IP为192.168.227.1
   (ifconfig bridge0 192.168.227.1 netmask 255.255.255.0)

3、然后docker容器以网桥方式用pipework挂到bridge0下:
     docker run -idt --privileged -h="h2" -p 80:80 --net=none --name h2 7322fbe74aa5 /sbin/init
     pipework bridge0 h2 192.168.227.2/ 24@192.168.227.1

综上所诉:宿主机和非宿主机都是192.168.0网段;而docker容器是192.168.227网段

现在的问题是:
我用一台非宿主机(os:win8, ip:192.168.0.101)试图连docker容器h2失败(ping 192.168.227.2 不通),而宿主机ping 192.168.227.1和192.168.227.2 都是能ping通的,在容器h2中ping这台win8机器也能ping通,而且能访问公网。要怎么设置才能让一台非宿主机在外部直接访问容器?比如用ssh直接从192.168.0.101登录到192.168.227.2中?
### 解决宿主机终端与Docker容器终端命令冲突的方法 当遇到宿主机终端与 Docker 容器终端之间存在相同命名的命令工具时,可能会发生命令执行环境上的冲突。为了避免这种情况的发生并确保正确的命令被执行,有几种方法可供选择。 #### 方法一:使用绝对路径调用特定版本的命令 如果在同一系统中有多个同名但不同用途或版本的二进制文件,则可以通过指定其完整的安装路径来区分它们。例如,在宿主机上调用位于 `/usr/local/bin/` 下的 `ssh` 命令而不是默认路径下的另一个可能来自容器映射到同一位置的不同版本: ```bash /usr/local/bin/ssh root@172.17.0.2 # 明确指定了要使用的SSH客户端的位置[^1] ``` #### 方法二:利用别名隔离命令空间 为了解决潜在的名字碰撞问题,可以在 `.bashrc` 或者其他 shell 初始化脚本中设置别名,使得每次输入某个命令时自动加上前缀或其他参数指向期望的目标程序。比如给定如下定义后,只需键入 `host_ssh` 就能访问宿主机自带而任何已挂载镜像内的 SSH 实现了: ```bash alias host_ssh='/usr/bin/ssh' # 创建一个只针对宿主机的SSH连接别名 ``` #### 方法三:调整 `$PATH` 环境变量顺序 通过修改用户的 PATH 变量,可以让某些目录优先于其他的被搜索到。这样即使两个地方都存在名为 `command_name` 的可执行文件,也会先尝试加载第一个匹配项。对于希望总是优先考虑本地机器上原生应用程序的情况来说常有用处: ```bash export PATH=/usr/local/sbin:/usr/local/bin:$PATH # 调整PATH使宿主机命令优先级更高 ``` #### 方法四:进入容器内部操作 有时最简单直接的办法就是完全避开外部干扰因素——即切换至目标容器内完成相应任务而不必担心外界影响。这通常涉及到启动交互式的 bash session 来获得对该进程更细粒度控制权的方式实现: ```bash docker exec -it container_id /bin/bash # 进入指定ID的容器内部进行操作[^4] ``` 上述措施能够有效地帮助用户处理好由于多源共存所引起的各类矛盾现象;当然具体采取哪一种取决于实际应用场景和个人偏好等因素综合考量的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值