Skip to content

Docker Astuces diverses

Auteur : Philippe Le Van - @plv

Date : 6 avril 2022

Introduction

Cette page donne quelques recettes et astuces en vrac pour se simplifier la vie avec docker en dev.

  • Limiter les réseaux créés par docker
  • Limiter la taille des logs docker (docker logs)
  • Avoir un affichage différent du docker ps avec des IP

Limiter les réseaux créés par docker

Warning

Ne fonctionne qu'avec Docker sous Linux

À chaque fois qu'on lance une stack, docker attribue arbitrairement un réseau (genre 172.17.0.0/16) à la stack.

Le problème est que régulièrement il crée des réseaux en /16. Quand on a beaucoup de stacks, ça finit toujours par faire des conflits avec des réseaux locaux ou des VPN,...

Pour contrôler un peux mieux les adresses créées on peut utiliser l'option "default-address-pools" dans le fichier /etc/docker/daemon.json :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "log-driver": "json-file",
  "log-opts": {"max-size": "2m", "max-file": "1"},
  "default-address-pools" : [
    {
      "base" : "10.141.0.0/16",
      "size" : 24
    }
  ]
}

À partir de là, les nouveaux réseaux créés seront des réseaux de classe /24 à l'intérieur du réseau 10.141.xxx/16

Vous pouvez faire le ménage dans vos anciens réseaux avec docker network prune

docker ps avec les IP

L'affichage par défaut de docker ps est souvent pas pratique.

Je vous propose une fonction dops à ajouter à la fin de votre fichier ~/.bashrc

Cette fonction vous permet d'avoir rapidement :

  • l'id du container
  • le nom du container
  • l'IP du container
  • le nom de l'image associée
1
2
3
4
5
6
philippe@philippe-XPS-13-9350:~$ dops
Container Id  Container Name      Container IP   Image
2b9c7f43b528  portainer_app_1     10.242.1.2     cr.portainer.ioportainer/portainer-ce:2.11.1
f54faa37eb11  proje_mkdocs_1      10.242.13.2    polinuxmkdocs
ec51d959a1ea  notes_app_1         10.242.17.2    polinuxmkdocs
ec327943aadc  traefik_traefik_1                  traefik:latest

Pour que ça fonctionne, ajouter à la fin de votre fichier ~/.bashrc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function dops() {
    _print_container_info() {
        local container_id
        local container_ports
        local container_ip
        local container_name
        container_id="${1}"
        container_name="$(docker inspect --format "{{ .Name }}" "$container_id" | sed 's/\///')"
        container_ip="$(docker inspect --format "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" "$container_id")"
        container_image="$(docker inspect --format "{{ .Config.Image }}" "$container_id" | sed 's/\///')"
        printf "%-13s %-30s %-20s %-40s\n" "$container_id" "$container_name" "$container_ip" "$container_image"
    }

    local container_id
    container_id="$1"
    printf "%-13s %-30s %-20s %-40s\n" 'Container Id' 'Container Name' 'Container IP' 'Image'
    if [ -z "$container_id" ]; then
        local container_id
        docker ps --format "{{.ID}}" | while read -r container_id ; do
            _print_container_info  "$container_id"
        done
    else
        _print_container_info  "$container_id"
    fi
}

Cette fonction est très largement inspirée du gist suivant : https://gist.github.com/ipedrazas/2c93f6e74737d1f8a791