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
復制代碼

說明:
#gateway是網關地址
subnet是網絡號段
mynet1是自定義的網絡名稱

 

幾點說明:

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
 
 

docker-compose ps

docker-compose -f docker-compose.yml down

---------------------

version: '3.6'
services:
mysql:
image: harbor.xjgreat.com:8084/davinci/mysql:1.0
restart: always
environment:
- MYSQL_ROOT_PASSWORD=abc123123
- MYSQL_DATABASE=davinci
ports:
- 63306:3306
volumes:
- mysql_data:/var/lib/mysql
- davinci_initdb:/docker-entrypoint-initdb.d:ro
networks:
mynet1:
ipv4_address: 192.1.0.2

davinci:
environment:
- MYSQL_CONN=jdbc:mysql://mysql:3306/davinci?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
- DB_USER=root
- DB_PWD=abc123123
- MAIL_HOST=smtp.exmail.qq.com
- MAIL_PORT=465
- MAIL_STMP_SSL=true
- MAIL_USER=pingtaiceshi@xjgreat.com
- MAIL_PWD=Platform123
- MAIL_NICKNAME=davinci
image: "harbor.xjgreat.com:8084/davinci/davinci:1.0"
ports:
- 8083:8080
command: ["./bin/start.sh", "mysql:3306", "--", "start-server.sh"]
restart: always
volumes:
- davinci_logs:/opt/davinci/logs
- davinci_userfiles:/opt/davinci/userfiles
- davinci_initdb:/initdb
networks:
mynet1:
ipv4_address: 192.1.0.3

davinci_skin:
environment:
- MYSQL_CONN=jdbc:mysql://mysql:3306/davinci_skin?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
- DB_USER=root
- DB_PWD=abc123123
image: "harbor.xjgreat.com:8084/davinci/davinci_skin:1.0"
ports:
- 8082:8080
restart: always
networks:
mynet1:
ipv4_address: 192.1.0.4

networks:
mynet1:
ipam:
config:
- subnet: 192.1.0.0/16

volumes:
davinci_userfiles:
davinci_logs:
davinci_initdb:
mysql_data:

 

docker-compose -f docker-compose.yml config

docker-compose -f docker-compose.yml up -d -t 120

docker-compose ps

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM