shenyuan
V2EX  ›  问与答

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

  •  1
     
  •   shenyuan · Nov 5, 2017 · 3803 views
    This topic created in 3114 days ago, the information mentioned may be changed or developed.

    目前的方法是写一个 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 文件,感觉这种方式不是很优雅,有没有更好的方案呢?

    3 replies    2017-11-05 11:55:08 +08:00
    dangyuluo
        1
    dangyuluo  
       Nov 5, 2017
    可以考虑在不同的 docker-compose.yaml 目录下生成不同的.env 环境文件?这样比较好管理一点。
    然后在里面定义网络,ip, container 等等
    dangyuluo
        2
    dangyuluo  
       Nov 5, 2017   ❤️ 1
    你可以生成环境文件,保持 yaml 模版不变,然后在运行 docker-compose 的时候使用--env-file 参数来指定。
    Elegant
    shenyuan
        3
    shenyuan  
    OP
       Nov 5, 2017
    @dangyuluo 初步测试应该是可行的,修改模板文件里面的$subnet 为 "${SUBNET}",然后.env 文件里指定 SUBNET=172.18.1.0/24 这种方式,在 docker-compose up 的时候默认会到当前目前下去找.env 里面的环境变量进行替换,用 docker-compose config 也验证了的确是进行了替换
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2765 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 11:11 · PVG 19:11 · LAX 04:11 · JFK 07:11
    ♥ Do have faith in what you're doing.