compose.yaml.j2 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. services:
  2. {{ service_name }}:
  3. image: docker.io/ubuntu/bind9:9.20-24.10_edge
  4. restart: {{ restart_policy }}
  5. {% if container_hostname %}
  6. hostname: {{ container_hostname }}
  7. {% endif %}
  8. environment:
  9. - TZ={{ container_timezone }}
  10. - BIND9_USER=bind
  11. {% if network_mode == 'host' %}
  12. network_mode: host
  13. {% elif network_mode == 'bridge' or network_mode == 'macvlan' %}
  14. networks:
  15. {% if network_mode == 'macvlan' %}
  16. {{ network_name }}:
  17. ipv4_address: {{ network_macvlan_ipv4_address }}
  18. {% elif network_mode == 'bridge' %}
  19. {{ network_name }}:
  20. {% endif %}
  21. {% endif %}
  22. {% if network_mode == '' or network_mode == 'bridge' %}
  23. ports:
  24. - "53:53/tcp"
  25. - "53:53/udp"
  26. {% endif %}
  27. volumes:
  28. {% if volume_mode == 'mount' %}
  29. - {{ volume_mount_path }}/config:/etc/bind:rw
  30. - {{ volume_mount_path }}/zones:/var/lib/bind:rw
  31. - {{ volume_mount_path }}/cache:/var/cache/bind:rw
  32. {% else %}
  33. - {{ service_name }}_config:/etc/bind
  34. - {{ service_name }}_zones:/var/lib/bind
  35. - {{ service_name }}_cache:/var/cache/bind
  36. {% endif %}
  37. {#
  38. Network definitions (only when needed):
  39. - When network_mode is empty: no definition needed (uses Docker's default bridge)
  40. - When network_mode is 'bridge': define custom bridge network
  41. - When network_mode is 'macvlan': configure macvlan with static IP (for Compose mode)
  42. #}
  43. {% if network_mode == 'bridge' or network_mode == 'macvlan' %}
  44. networks:
  45. {{ network_name }}:
  46. {% if network_external %}
  47. external: true
  48. {% else %}
  49. {% if network_mode == 'macvlan' %}
  50. driver: macvlan
  51. driver_opts:
  52. parent: {{ network_macvlan_parent_interface }}
  53. ipam:
  54. config:
  55. - subnet: {{ network_macvlan_subnet }}
  56. gateway: {{ network_macvlan_gateway }}
  57. name: {{ network_name }}
  58. {% elif network_mode == 'bridge' %}
  59. driver: bridge
  60. {% endif %}
  61. {% endif %}
  62. {% endif %}
  63. {#
  64. Volume definitions:
  65. - When volume_mode is 'local' (default): use docker-managed local volumes
  66. - When volume_mode is 'nfs': configure NFS-backed volumes
  67. - When volume_mode is 'mount': no volume definition needed (bind mounts used directly)
  68. #}
  69. {% if volume_mode == 'local' %}
  70. volumes:
  71. {{ service_name }}_config:
  72. driver: local
  73. {{ service_name }}_zones:
  74. driver: local
  75. {{ service_name }}_cache:
  76. driver: local
  77. {% elif volume_mode == 'nfs' %}
  78. volumes:
  79. {{ service_name }}_config:
  80. driver: local
  81. driver_opts:
  82. type: nfs
  83. o: addr={{ volume_nfs_server }},{{ volume_nfs_options }}
  84. device: ":{{ volume_nfs_path }}/config"
  85. {{ service_name }}_zones:
  86. driver: local
  87. driver_opts:
  88. type: nfs
  89. o: addr={{ volume_nfs_server }},{{ volume_nfs_options }}
  90. device: ":{{ volume_nfs_path }}/zones"
  91. {{ service_name }}_cache:
  92. driver: local
  93. driver_opts:
  94. type: nfs
  95. o: addr={{ volume_nfs_server }},{{ volume_nfs_options }}
  96. device: ":{{ volume_nfs_path }}/cache"
  97. {% endif %}