具有特定IP的docker集装箱的networking问题

问题

我在我的dockernetworking中有一个IP地址(172.17.0.11)的问题。 每当容器获取此IP时,容器的出站连接将停止工作。 当我杀死这个容器时:

  • 尽pipe没有人使用,但我仍然可以ping通这个IP
  • iptables中没有与此IP关联的规则
  • 在netstat中,我看到了很多docker-proxybuild立的连接,但是同时,这个列表中的其他IP与悬挂连接没有任何问题

对我来说看起来像IP冲突 – curl不起作用,可能是因为他们每次重新build立连接都很慢。 这不是DNS问题 ,由IPcurl不起作用,使用什么docker形象没有什么区别。

基础设施

这是Debian 8(4.9内核)上的一个单独的服务器安装,包含kubernetes 1.6.4和docker-ce 17.06.1(overlay2)。 这个问题发生在我从1.12.6升级到17.06.1之后

请帮我debugging这个问题。

docker版本:

 Client: Version: 17.06.1-ce API version: 1.30 Go version: go1.8.3 Git commit: 874a737 Built: Thu Aug 17 22:53:31 2017 OS/Arch: linux/amd64 Server: Version: 17.06.1-ce API version: 1.30 (minimum version 1.12) Go version: go1.8.3 Git commit: 874a737 Built: Thu Aug 17 22:51:25 2017 OS/Arch: linux/amd64 Experimental: false 

docker信息:

 Containers: 336 Running: 336 Paused: 0 Stopped: 0 Images: 52 Server Version: 17.06.1-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 6e23458c129b551d5c9871e5174f6b1b7f6d1170 runc version: 810190ceaa507aa2727d7ae6f4790c76ec150bd2 init version: 949e6fa Kernel Version: 4.9.0-0.bpo.3-amd64 Operating System: Debian GNU/Linux 8 (jessie) OSType: linux Architecture: x86_64 CPUs: 8 Total Memory: 28.76GiB Name: host ID: QY6I:JI2S:BOPG:FIQP:YEBB:3UYF:N3G2:COCQ:PX7Z:QRCV:GIEN:FGQC Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false 

你有没有尝试重新启动故障节点? 看起来像一些命名空间/网桥configuration可能已经卡住了。

这个问题是由dockernetworking(网桥插件)和主机上networking的实际状态之间的asynchronous引起的。 dockernetworking的IP被释放,但相关的虚拟接口和相关的TCP连接保持不变。 所以当这个IP连接到一个新的容器时,networkingexception开始发生。

最有可能发生在随机的docker守护进程挂起之后(发生在较旧的1.12版本中)。