同时运行多套 docker-compose up 的环境,不同网段相互隔离

2017-11-05 11:08:02 +08:00
 shenyuan

目前的方法是写一个 docker-compose.yml 的模本文件,然后去替换里面的相关参数,例如模板文件如下:

version: '2'
services:
  db:
    image: mysql
    container_name: $db_name
    networks:
      - app_net
  web:
    build: ./web
    expose:
      - "80"
      - "443"
      - "8080"
    networks:
      app_net:
        ipv4_address: $web_ip
    container_name: $web_name
    depends_on:
      - db
    links:
      - db
    
networks:
  app_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: $subnet
          gateway: $gateway

模板文件通过 python string 的 Template 进行变量替换,通过替换 subnet、gateway 以及 container_name、web_ip 的方法来生成不同的 docker-compose.yml 文件,感觉这种方式不是很优雅,有没有更好的方案呢?

3032 次点击
所在节点    问与答
3 条回复
dangyuluo
2017-11-05 11:25:58 +08:00
可以考虑在不同的 docker-compose.yaml 目录下生成不同的.env 环境文件?这样比较好管理一点。
然后在里面定义网络,ip, container 等等
dangyuluo
2017-11-05 11:28:08 +08:00
你可以生成环境文件,保持 yaml 模版不变,然后在运行 docker-compose 的时候使用--env-file 参数来指定。
Elegant
shenyuan
2017-11-05 11:55:08 +08:00
@dangyuluo 初步测试应该是可行的,修改模板文件里面的$subnet 为 "${SUBNET}",然后.env 文件里指定 SUBNET=172.18.1.0/24 这种方式,在 docker-compose up 的时候默认会到当前目前下去找.env 里面的环境变量进行替换,用 docker-compose config 也验证了的确是进行了替换

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/403646

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX