問題描述
還是那個研究安全大業的同事,在部署他的秘密武器,是用docker-compose部署的,有差不多20多個docker-compose.yml文件,然后由於
docker-compose.yml中創建自定義網絡的時候,默認的網段為172.*.*.*;導致了和我們自己的跳板機網段沖突,只有部署完他的秘密武器,通過跳板機就通過內網登不上去了;那么有沒有一種方法可以使得docker-compose up創建新的網橋的時候不是使用默認的172網段的,而是使用我們自定義的網段呢;在
上一篇博文中修改/etc/docker/daemon.json的方法只是修改docker0,而我docker-compose每次創建新的網橋的時候,還是使用默認的172.*.*.*;
具體表現
當docker-compose.yml的配置文件為:
version: '2.3' networks: cow-cow5: services: ...... cow: networks: - cow-cow5
當配置文件為上面的時候,docker-compose up的時候,會自動創建名為filename-cow-cow5的網橋,並且這個
filename-cow-cow5網橋的子網和網段默認為172.17.*.*


當我想要docker-compose使用我指定的子網和網關的話,有什么方法呢?
方法一
在docker-compose.yml配置文件中明確的指定subnet和gateway
version: '2.3' networks: cow-cow5: driver: bridge ipam: driver: default config: - subnet: 10.88.12.0/24 gateway: 10.88.12.1 services: cowrie: ...... networks: - cow-cow
使用上面這個配置之后,當docker-compose up的時候,
會創建名為filename-cow-cow5的網橋,並且這個
filename-cow-cow5網橋的子網和網段是我們設置的這個 10.88.12.*;那么連接該網絡的容器的IP也是10.88.12.*段的;達到了我們的需求
方法二
但是當使用docker-compose部署大型項目的時候,幾十個docker-compose.yml文件,那么就得一個一個改,作為勵志成為運維大佬的我們來說不應該一個一個去改,得想辦法,有沒有一種辦法:只需修改一個地方,然后docker-compose up創建新網橋的時候就會使用我們設置的那個網段和子網;像修改docker0的網段一樣,修改/etc/docker/daemon.json配置文件,docker0的網段就會變為在daemon.json里設置的這個;有沒有類似於只要修改一個配置文件,docker-compose每次創建新的網橋的時候都會按照配置文件里的來
找了很久,也在一些群里問了,但是基本上都是瞎扯的群,趕緊退群的好;還是自己動手,豐衣足食;終於在以下兩篇博客中找到了辦法:
找到了就得測試行不行,實踐是檢驗真理的唯一標准,蒽~~~(動手吧)
1)版本(必須是18.09.1)
docker-ce-cli-18.09.1-3.el7.x86_64 docker-ce-18.09.1-3.el7.x86_64
2)在/etc/docker/daemon.json中添加
{ "debug" : true, "default-address-pools" : [ { "base" : "12.11.0.0/16", "size" : 24 } ] }
3、重啟docker
systemctl restart docker
4、經測試結果生效,得出以下結論
docker0的網段變成了在/etc/docker/daemon.json設置的這個,docker-compose up時每次創建網絡的時候也會使用在/etc/docker/daemon.json指定的這個網段
安裝腳本:
https://github.com/Lemon-le/Shell-Script/blob/master/install_docker_v18-09-1.sh (docker)
https://github.com/Lemon-le/Shell-Script/blob/master/install_docker_compose.sh (docker-compose)
官網安裝手冊:
https://docs.docker.com/install/linux/docker-ce/centos/ (docker)
https://docs.docker.com/compose/install/ (docker-compose)