统一 DN42 DNS 与宿主 Docker 地址池

This commit is contained in:
2026-09-17 13:22:49 +00:00
parent 76f94f4f31
commit a08c8a7303
10 changed files with 146 additions and 13 deletions
+27
View File
@@ -0,0 +1,27 @@
# Docker 地址池与 DN42
DN42 使用 `172.20.0.0/14`。laptop 的 Docker 默认地址池改为 `172.28.0.0/16`,
按 `/24` 分配新 bridge,避免本地直连路由与 DN42 前缀重叠。
`ansible/site.yml` 合并现有 daemon.json,保留 NVIDIA runtime;先热加载 live-restore,
再重启 daemon 使默认地址池生效,避免已有容器随 daemon 停止。
```bash
ANSIBLE_LOCAL_TEMP=/tmp/ansible-docker ansible-playbook -i localhost, infrastructure/docker/ansible/site.yml --check --diff
ANSIBLE_LOCAL_TEMP=/tmp/ansible-docker ansible-playbook -i localhost, infrastructure/docker/ansible/site.yml
```
已有网络不会自动换地址。本次单独迁移结果:
| 网络 | 原地址 | 当前地址/状态 |
|---|---|---|
| blocky_default | 172.20.0.0/16 | 172.28.0.0/24,Compose 明确声明 |
| ps3netsrv_default | 172.21.0.0/16 | 172.28.1.0/24,Compose 明确声明 |
| research-auto_default | 172.22.0.0/16 | 172.28.2.0/24,仓库外 research-auto Compose 明确声明 |
| netboot_default | 172.23.0.0/16 | 删除无端点的遗留网络;netboot 两个容器均使用 host 网络 |
Blocky 健康检查与 DNS 查询通过;ps3netsrv 运行,游戏数据挂载保留。
research-auto 的 postgres 容器仅 create、未启动,原命名卷 `research-auto_postgres_data` 保留。
旧运行容器曾引用仓库重组前的 `/home/panxiao81/services/<app>` 挂载路径;
本次 Blocky 已用 `apps/blocky` 路径重建,netboot 等未重建的容器仍需在重建时使用当前 Compose。
不要在未检查 bind mount 路径的情况下关闭 live-restore 并重启所有容器。
@@ -0,0 +1,2 @@
[defaults]
local_tmp = /tmp/ansible-docker
+61
View File
@@ -0,0 +1,61 @@
---
- name: 为 DN42 排除 Docker 地址池重叠
hosts: localhost
connection: local
become: true
gather_facts: false
vars:
ansible_python_interpreter: /usr/bin/python3
docker_address_pools:
- base: 172.28.0.0/16
size: 24
tasks:
- name: 读取现有 Docker 配置并保留 runtimes 等设置
ansible.builtin.slurp:
src: /etc/docker/daemon.json
register: docker_config
no_log: true
# 先让旧 daemon 知道 live-restore,随后重启才能保留运行容器。
- name: 启用 live-restore
ansible.builtin.copy:
content: "{{ (docker_config.content | b64decode | from_json | combine({'live-restore': true})) | to_nice_json }}\n"
dest: /etc/docker/daemon.json
owner: root
group: root
mode: '0644'
backup: true
validate: /usr/bin/dockerd --validate --config-file %s
register: live_restore_config
- name: 热重载 live-restore
ansible.builtin.systemd_service:
name: docker
state: reloaded
when: live_restore_config.changed and not ansible_check_mode
- name: 确认运行中的 daemon 已启用 live-restore
ansible.builtin.command: docker info --format '{{ '{{' }}.LiveRestoreEnabled{{ '}}' }}'
register: live_restore_status
changed_when: false
retries: 5
delay: 2
until: live_restore_status.stdout == 'true'
when: not ansible_check_mode
- name: 配置 DN42 范围之外的默认地址池
ansible.builtin.copy:
content: "{{ (docker_config.content | b64decode | from_json | combine({'live-restore': true, 'default-address-pools': docker_address_pools})) | to_nice_json }}\n"
dest: /etc/docker/daemon.json
owner: root
group: root
mode: '0644'
backup: true
validate: /usr/bin/dockerd --validate --config-file %s
register: docker_pool_config
- name: 保留运行容器并重启 daemon 使地址池生效
ansible.builtin.systemd_service:
name: docker
state: restarted
when: docker_pool_config.changed and not ansible_check_mode