docker-compose 手工指定容器IP

首先明确两点:

1只有自定义网络,才能手工指定每个容器的ip。默认的bridge是不行的!

2 手工设定了网段比如172.19.0.0   不影响docker在host装的网卡docker0 的172.17.0.1

  容器内的172.19.0.XX  还是可以通过172.17.0.1访问到主机。

 

docker-compose.yml  参考官网 https://docs.docker.com/compose/compose-file/#network-configuration-reference

version: '3.7'
services:
   x1:
      image: XXX
      restart: always
      tty: true
      networks:
         mynet1:
            ipv4_address: 172.19.0.2
 
networks:
   mynet1:
      ipam:
         config:
         - subnet: 172.19.0.0/16

几点说明:

1 2以前,可以在ipam里指定gateway  3以后不许了;

2 静态指定ip,则每个容器都要静态指定,添加networks 部分

3 运行docker-compose up 首先会创建network 注意之前如果已经运行过多个不同工程的docker-compose 可能已经自动创建了很多network

  这样如果IP网段已经分配过了,就会失败:

ERROR: Pool overlaps with other one on this address space

类似地,此外如果已经创建了network mynet1的网段 为 172.28.0.0,但是想改成172.19.0.1,也会说失败

  这样都需要清理一下无效的network

  清除各种不用的docker相关东西 参考  https://blog.csdn.net/wennuanddianbo/article/details/78453325

docker network prune

 4 3以后无法指定IP地址类型。只能是ipV6,在node里

const requestIp = require('request-ip');
...
app.use(requestIp.mw())
...
req.clientIp

 

得到的都是ipv6地址,都在ipv4地址前都补上了::fff:
形如
::ffff:172.19.0.10
posted @ 2019-03-22 10:03  永远的幻想  阅读(20400)  评论(0编辑  收藏  举报