Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 1.9.0“;桥“;与自定义网桥网络相比,hosts文件和SSH_客户机env变量存在差异_Docker - Fatal编程技术网

Docker 1.9.0“;桥“;与自定义网桥网络相比,hosts文件和SSH_客户机env变量存在差异

Docker 1.9.0“;桥“;与自定义网桥网络相比,hosts文件和SSH_客户机env变量存在差异,docker,Docker,首先让我解释一下我想做什么,因为可能有多种方法可以解决这个问题。docker 1.9.0中有两个容器: node001(172.17.0.2)(sudo docker run--net=--name=node001-h node001--privileged-t-i-v/sys/fs/cgroup:/sys/fs/cgroup) 节点002(172.17.0.3)(,) 当我用--net=bridge启动它们时,当我从一个SSH到另一个SSH时,我会得到SSH\u CLIENT的正确值: [

首先让我解释一下我想做什么,因为可能有多种方法可以解决这个问题。docker 1.9.0中有两个容器:

  • node001(172.17.0.2)(
    sudo docker run--net=--name=node001-h node001--privileged-t-i-v/sys/fs/cgroup:/sys/fs/cgroup
  • 节点002(172.17.0.3)(
当我用
--net=bridge
启动它们时,当我从一个SSH到另一个SSH时,我会得到
SSH\u CLIENT
的正确值:
[root@node001~]#嘘root@172.17.0.3
root@172.17.0.3的密码:
[root@node002~]#环境| grep SSH_客户端
SSH_CLIENT=172.17.0.3 56194 22
[root@node001~]#ping-c1节点002
ping:未知主机node002

在docker 1.8.3中,我还可以使用启动时提供的主机名,在1.8.3中,最后一个ping语句有效

在docker 1.9.0中,我没有看到在
/etc/hosts
中添加任何内容,ping语句失败。这对我来说是个问题。所以我试着创建一个自定义网络

docker网络创建——驱动桥测试

当我用
--net=test
启动两个容器时,我得到了
SSH\u客户端的一个不同值:
[root@node001~]#嘘root@172.18.0.3
root@172.18.0.3的密码:
[root@node002~]#环境| grep SSH_客户端
SSH_CLIENT=172.18.0.1 57388 22
[root@node001~]#ping-c1节点002
PING节点002(172.18.0.3)56(84)字节的数据。
来自节点002的64字节(172.18.0.3):icmp_seq=1 ttl=64时间=0.041毫秒

请注意,ip地址不是node001,它似乎代表docker主机本身。但主机文件是正确的,包含:

172.18.0.2节点001
172.18.0.2节点001.1试验
172.18.0.3节点002
172.18.0.3节点002.1测试

我目前的解决方法是使用docker 1.8.3和默认的
网桥
网络,但我希望这能在未来的docker版本中使用

  • 是否有任何方法可以自定义
    测试
    网络,使其行为类似于默认的
    网桥
    网络
或者:

  • 是否可以将默认的
    网桥
    网络写入docker 1.9.0中的
    /etc/hosts
    文件
我们将非常感谢您对不同解决方案的任何帮助或指点

编辑:21-01-2016 显然,问题已在1.9.1中解决,docker 1.8中有bridge,1.9.1中有自定义(--net=test),现在行为正确:

[root@node001tmp]#ip路由
默认通过172.17.0.1 dev eth0
172.17.0.0/16 dev eth0原型内核作用域链接src 172.17.0.5

[root@node002~]#环境| grep SSH_客户端
SSH_CLIENT=172.18.0.3 52162 22

在1.9.0中重试,看看我是否疯了,是的,问题出现了:

[root@node001tmp]#ip路由
默认通过172.18.0.1 dev eth0
172.18.0.0/16 dev eth0原型内核作用域链接src 172.18.0.3

[root@node002~]#环境| grep SSH|u CLI
SSH_CLIENT=172.18.0.1 53734 22


因此,在删除/停止/启动实例之后,IP地址并不完全相同,但可以很容易地看出,在最后一个代码块中,ssh_客户端源IP不正确。感谢@sourcejedi让我重新检查。

首先,我认为无法更改默认网络上的任何设置,即写入
/etc/hosts
。显然,您无法删除默认网络,因此无法使用不同的选项重新创建它们

其次

Docker很小心,它的主机范围的iptables规则将容器完全暴露给彼此的原始IP地址,因此从一个容器到另一个容器的连接应该总是从第一个容器自己的IP地址开始

我试着用我玩过的随机容器复制你的问题。在网络的网桥接口上运行wireshark时,我没有看到我的ping数据包。从这一点上,我得出结论,我的容器确实是在相互直接对话;主机未执行路由和NAT

您需要检查客户端容器上的路由
ip路由
。您有去
172.18.0.2/16
的路线吗?如果只有默认路由,它可以尝试通过docker主机发送所有内容。它可能会感到困惑,伪装成与外界对话的样子


如果您正在特权容器中运行某些网络配置,则可能会发生这种情况。我不知道如果你只是用
bash
启动它会发生什么。

你的回答让我重新检查,我发现这是1.9.0的一个问题,我编辑了我的回答,供有同样问题的人使用。哇。你说得对,我的系统上有docker 1.9.1,所以这就是我必须测试的。