标签: docker

  • docker升级ejbca 8.3.2 到 9.0.0 版本

    docker升级ejbca 8.3.2 到 9.0.0 版本

    9.0.0版本不再支持旧版本的h2数据库,会出现“Unsupported database file version or invalid file header in file”错误信息,需要升级h2数据库版本。

    升级h2数据库到2.0版本

    • 停止并删除现有ejbca容器

    • 安装21版本以上的openjdk

    • 下载1.4版本的h2 jar包
      https://h2database.com/h2-2019-10-14.zip

    • 启动h2数据库服务

      命令行窗口执行 java -jar bin\h2-1.4.200.jar

    • 下载数据库

      进入ejbca的persistent目录,下载ejbcadb.*.db文件到本地

    • 打开数据库

      浏览器打开localhost:8082/login.jsp
      输入数据库文件路径,我这里是jdbc:h2:C:\software\h2\data\ejbcadb,输入数据库名的时候不带任何后缀。
      用户名:sa,密码:sa

    • 备份数据库到Sql

      sql命令窗口执行script to 'ejbcadb.sql'

    • 关闭数据库连接,关闭数据库服务,删除数据库文件

    • 下载2.3版本的h2数据库jar包

      https://github.com/h2database/h2database/releases

    • 启动新版的数据库服务

      命令行窗口执行 java -jar java -jar h2-2.3.232.jar

    • 启动h2数据库服务

    • 创建数据库

      浏览器打开localhost:8082/login.jsp
      输入数据库文件路径,我这里是jdbc:h2:C:\software\h2\data\ejbcadb,输入数据库名的时候不带任何后缀。
      用户名:sa,密码:sa
      当输入的数据库不存在时会自动创建数据库

    • 导入数据

      sql命令窗口执行runscript from 'ejbcadb.sql'

    • 复制新建创的ejbcadb数据库到原位置

    更新ejbca镜像版本

    • 拉取新版本的ejbca

      docker pull keyfactor/ejbca-ce

    • 启动容器

      docker compose -up -d

    升级后除了版本号没发现有什么功能上的变化

    Views: 9

  • 解决docker仓库镜像不生效的问题

    docker logout
    如果已经登录了docker hub会导致docker pull时始终走你登录的那个仓库造成registry-mirrors不生效,这个问题困扰了我很多年。
    即使是在Docker Desktop上登录也会导致同样的问题,所以要用非官方仓库的时候不能登录任何docker帐号

    Views: 81

  • nexus搭建docker hub镜像

    参考这个页面上的docker镜像列表
    https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6
    其中除了docker.nju.edu.cn和docker.m.daocloud.io,其它都只有文件服务,没有索引(docker index),所以nexus里面index要选择Docker Hub。docker.nju.edu.cn则可以选择Use proxy registry (specified above)。
    但是因为docker.nju.edu.cn和Docker Hub的Index并不一致,所以要统一选择Use proxy registry (specified above)。
    我用的上海交大和南京大学的镜像,测试下来这两个比较快。
    南京大学的配置

    上海交大的配置

    dcloud配置

    组合配置

    测试下来就这几个能用的,中科大的虽然能用但慢的一批,剩下的都用不了。
    我测试下来好用的几个docker hub镜像:
    https://docker.nju.edu.cn
    https://docker.mirrors.sjtug.sjtu.edu.cn
    https://docker.m.daocloud.io
    https://hub.c.163.com
    https://your_code.mirror.aliyuncs.com(需要登录获取code,同步滞后)
    上面几个镜像除了docker.nju.edu.cn外都要加library前缀才能拉取
    能用但速度极慢的:
    https://mirror.baidubce.com
    偶尔能用,但极不稳定:
    https://mirror.iscas.ac.cn
    https://dockerproxy.com

    Views: 505

  • docker容器内支持IPv6

    有多种方法可以实现

    • 使用host类型网络
    services:
      web:
        image: haohetao/nginx
        restart: always
        network_mode: "host"
    

    这样容器内直接使用宿主机的IP地址,而且这种情况下不再需要对外公布端口,因为端口直接就在宿主机上

    • 给宿主机分配私有IPv6地址

      /etc/docker/daemon.json添加以下内容

      “`json
      {
      "registry-mirrors": ["https://docker.hetao.me"],
      "bip": "172.18.0.1/16",
      "ipv6": true,
      "fixed-cidr-v6": "fd33::1/64",
      "experimental": true,
      "ip6tables": true
      }
      </p></li>
      </ul>

      <pre><code class="line-numbers">这样可以全局开启IPv6
      如果要在docker compose中开启IPv6,可以在docker-compose.yaml中指定
      “`yaml
      services:
      web:
      image: haohetao/nginx
      restart: always
      ports:
      – 80:80/tcp
      – 443:443/tcp
      – 443:443/udp
      networks:
      web-network:
      ipv4_address: 172.30.0.20
      ipv6_address: fd34::20
      networks:
      web-network:
      driver: bridge
      enable_ipv6: true
      ipam:
      config:
      – subnet: “172.30.0.0/24”
      – subnet: “fd34::/64”

      这样docker会自动添加NAT64,容器用私有IPV6也能上网

      • 分配固定公网IP

        ip6tables设为false,同时把私有IPv6改为公网IPv6即可,此方法需要路由器或者云平台支持划分子网段
        aws支持,aliyun不支持

      • NDP proxying
        注意:aliyun不支持,aliyun限制了一个网卡只能有一个IPv6地址(不同实例规格数量不同),多余的IP会被拦截
        daemon.json配置

      {
        "registry-mirrors": ["https://docker.hetao.me"],
        "bip": "172.18.0.1/16",
        "ipv6": true,
        "fixed-cidr-v6": "2409:8a1e:6a51:61e1:2::/80",
        "experimental": true,
        "ip6tables": false
      }
      

      容器子网要在宿主机的网段范围内,前缀要小于宿主机前缀(不能等于)

      然后在宿主机上执行

      sysctl -w net.ipv6.conf.enp6s18.proxy_ndp=1
      sysctl net.ipv6.conf.default.forwarding=1
      sysctl net.ipv6.conf.all.forwarding=1
      ip -6 neigh add proxy 2409:8a1e:6a51:61e1:0:242:ac11:2 dev enp6s18 #这个ipv6地址是容器的ipv6地址
      

      最后一部的ip -6 neigh命令可以替换为npd6

      apt install npd6
      cd /etc/
      cp npd6.conf.examle npd6.conf
      

      配置

      prefix=2409:8a1e:6a51:61e1:2:
      interface = enp6s18

      systemctl enable npd6
      systemctl start npd6
      
      • SLAAC或DHCPv6分配公网IPv6

        目前没有找到方法

      总结下来就是还是NAT66最靠谱,其它方法都有各种局限性

      Views: 65

  • openwrt安装Docker

    安装这几个

    执行
    cp /etc/config/dockerd-opkg /etc/config/dockerd
    修改docker配置或仓库地址在这个文件中配置
    然后重启(重启前docker不能正常工作)

    Views: 148