悬挂镜像

sonarnotify 在 CI/CD 中用到了 Docker 多阶段构建。

在构建完成后,即使每次都删掉了构建后的镜像,通过 docker images 还是能发现一些标签为 的镜像。经过查阅资料发现,这些镜像称为悬挂镜像(dangling image)。

在 sonarnotify 中产生悬挂镜像的原因是由于多阶段中,引入了 golang 的镜像,最后生成的镜像却是基于 alpine 打包的。而中间依赖的 layer 最终没有打包到 sonarnotify 中,作为悬挂镜像被丢弃掉了。

image.png

网段

公司 Docker 网段与阿里云网段冲突,造成部分服务无法访问。Docker 网段如何调整呢?

全局调整

/etc/docker/daemon.json (这里没有这个文件的话,自行创建)

1
2
3
4
{
  "bip": "192.168.250.1/24",
  "default-address-pools": [{ "base": "10.250.0.1/16", "size": 24 }]
}

注:bipdefault-address-pools 2 个都要配置

bip 控制的是 docker 的默认网桥 docker0 的 IP,

default-address-pools 控制的是 docker network create 新创建的自定义网桥的 IP

docker-compose 默认情况启动的时候,会单独创建一个新的网桥

重启 docker docker-compose

1
2
3
4
5
6
7
8
// 重启docker
systemctl restart docker
// 如果是 upstart 系统
/etc/init.d/docker restart
// 停止docker-compose
docker-compose down
// 启动dokcer-compose
docker-compose up -d

通过 compose 调整

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
services:
  servername:
    ...
    ...
    networks:
      - net

networks:
  net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 192.168.249.0/24

排查网段冲突

image.png

通过 docker network ls 查看当前 docker 创建的所有网络,然后通过 docker network inspect 命令,可以查看可疑网段实际的子网

定位到有问题的网络后,可以通过 docker network rm 或 前往 docker-compose 目录进行 docker-compose down (推荐)

1
docker network ls -q | xargs -r docker network inspect --format='{{.Name}}  {{range .IPAM.Config}}{{.Subnet}}{{end}}'