小李同学 keep digging deeper
Docker

群晖DSM7中支持Docker IPV6

— 字

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 "$@"

逐段看:

  1. synopkgctl stop Docker 先停套件;
  2. sed 在 start-stop-status 里找到调用 DockerUpdaterBin 的那行,行首加 # 注释掉,以后启动就不会再重写 dockerd.json;
  3. jq 把 .ipv6 置为 true,其他字段原样保留;
  4. 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

本文作者 小李同学,转载请注明出处。

评论

还没有人留言。

写一条

提交后会先进站主的待审列表,通过之后才公开。

搜索文章

输入关键词搜索文章。