DSM 7 里的 Docker 套件默认不开 IPv6,直接改 /var/packages/Docker/etc/dockerd.json 也不行:套件每次启动都会用 DockerUpdaterBin postinst updatedockerdconf 重写这个文件,手改的 ipv6 当场被覆盖。
所以分三步:先把那行重写逻辑注释掉,再改配置,最后重启。
#!/usr/bin/env bash
_main() {
synopkgctl stop Docker
sed -i 's/^[^#]*[[:space:]]*\$DockerUpdaterBin postinst updatedockerdconf "\$(get_install_volume_type)"/#&/' \
/var/packages/Docker/scripts/start-stop-status
local docker_config_path='/var/packages/Docker/etc/dockerd.json'
local content="$(cat "${docker_config_path}")"
jq '. | .ipv6 = true' <<< "${content}" > "${docker_config_path}"
synopkgctl start Docker
}
_main "$@"
逐段看:
synopkgctl stop Docker先停套件;sed在start-stop-status里找到调用DockerUpdaterBin的那行,行首加#注释掉,以后启动就不会再重写dockerd.json;jq把.ipv6置为true,其他字段原样保留;synopkgctl start Docker启回来。
两个前提:需要 jq,没有的话 opkg 或 entware 装一个;脚本得用 root 跑。
注意这是直接改套件内部文件,DSM 或 Docker 套件升级后可能会被还原,升级后重新跑一遍,或者先去 start-stop-status 里确认那行还是注释状态。
参考:https://www.synoforum.com/threads/has-anyone-been-successful-in-enabling-ipv6-for-the-docker-daemon.435/#post-46105
评论
还没有人留言。