首先明確兩點:
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