Skip to main content
  1. Posts/

docker network 与 本地 network 网段冲突

·537 words·2 mins
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

起因:
#

公司部署在 hk 的爬虫服务器突然挂掉了。后来发现只是在深圳办公区无法访问。排查后发现原因是 docker 的网络(包括 docker network 的 subnet 或者是某个容器的 ip)与该 host 在内网的 ip 段相同,导致冲突。

排查过程:
#

有两个方面需要排查。一个是 docker 服务启动时的默认网络。

默认网络使用 bridge 桥接模式,是容器与宿主机进行通讯的默认办法。

修改默认网段可以参考 http://blog.51cto.com/wsxxsl/2060761

除此之外,还需要注意 docker 创建的 network 的网段。

使用 docker network ls 命令查看当前的网络。

然后可以使用 docker inspect 查看每个 network 的详细信息。

也可以直接使用 ip addr 来查看各种奇怪的虚拟网卡的 ip,是否有前两位的地址和 host 的 ip 地址相同。

解决办法:
#

本想在 docker-compose up 时指定默认网络的 subnet。

结果发现好像并不支持?version 1.10.0 error on gateway spec

Was there any discussion on that? I do need to customize the network, because my company uses the 172.16.0.0/16 address range at some segments and Docker will simply clash with that by default, so every single Docker server in the whole company needs a forced network setting.

Now while upgrading my dev environment to Docker 1.13 it took me hours to stumble into this Github issue, because the removal of those options was completely undocumented.

So please, if I am working on a network which requires a custom docker subnet, how am I supposed to use Docker Compose and Docker Swarm?

最后用了个比较间接的办法。

先手动创建一个 docker network,然后再在 docker-compose 的配置文件中指定。

1docker network create --subnet=172.25.0.0/16 spider-network
 1version: '3.6'
 2services:
 3  django:
 4    image: "registry.sensetime.com/spider/sensespider:v1.0"
 5    volumes:
 6      - spiderdata:/data
 7    privileged: true
 8    networks:
 9      - spider-network
10    ports:
11      - "8080:8080"
12    working_dir: /home/renkuanze/workspace/sensespider
13    entrypoint: bash run.sh
14    tty: true
15    container_name: django
16  splash:
17    image: "scrapinghub/splash"
18    container_name: splash
19    network_mode: "service:django"
20  react:
21    image: "registry.sensetime.com/spider/sensespider-react:v1.0"
22    working_dir: /home/node/sensespider-react
23    entrypoint: npm start
24    container_name: node
25    network_mode: "service:django"
26volumes:
27  spiderdata:
28    driver: local-persist
29    driver_opts:
30      mountpoint: /data/spider_data
31
32networks:
33  spider-network:
34    external: true

Related

lua学习笔记

·2216 words·5 mins
lua 是一门轻量级的脚本语言,好像比较适合写游戏?我在 太阳神三国杀 中见过很多 lua 脚本。由于 splash 的渲染脚本需要用 lua 来写,因此来学习一波。

golang 学习笔记

·358 words·1 min
先放资料,可能比较侧重于go在系统调用方面的内容. 这里不会记录详细的go的语法,只会记录学习的过程,踩到的坑,以及其他我认为值得记录的内容.

爬虫学习笔记

·1182 words·3 mins
再次迫于生计。。。 参考了面向新人的 Python 爬虫学习资料 大致的学习路线为: 一: 简单的定向脚本爬虫( request — bs4 — re )