Installation de Crystal sur Docker : comment ajouter le référentiel Crystal à Docker dans le Dockerfile

Dockerfile (extrait)

ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
RUN apt-get update && apt-get install -y \
         propriétés du logiciel - communes \
         essentiel pour la construction \
         libevent-dev \
         libssl-dev \
         libxml2-dev \
         libyaml-dev \
         libgmp-dev \
         libreadline-dev \
         apt-transport-https \
         iputils-ping \
         git \N
         aptitude \N
         nano \N
         serveur openssh \
         && apt-key adv -keyserver keys.gnupg.net -recv-keys 09617FD37CC06B54 \
         && add-apt-repository 'deb https://dist.crystal-lang.org/apt crystal main" \N
         && apt-get update \
         && apt-get install -y crystal \
         && rm -rf /var/lib/apt/lists/* ...
         && mkdir /root/.ssh

Le site ENV APT_KEY_DONT_WARN_ON_DANGEROUSE_USAGE est nécessaire pour que apt-key adv ne s'étouffe pas de ne pas être lancé depuis un terminal.

Pour ajouter le référentiel Crystal, la clé doit être installée

W : Erreur GPG : https://dist.crystal-lang.org/apt crystal InRelease : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 09617FD37CC06B54
E : Le dépôt 'https://dist.crystal-lang.org/apt crystal InRelease' n'est pas signé.

Lorsque vous ajoutez la clé à l'aide d'un Dockerfile, vous pouvez obtenir le message d'erreur suivant :

Exécution : /tmp/apt-key-gpghome.daecBAEPSJ/gpg.1.sh -keyserver keys.gnupg.net -recv-keys 09617FD37CC06B54
gpg : La réception du serveur de clés a échoué : Impossible d'assigner l'adresse demandée

Ceci est dû au fait que gpg n'est pas capable de se lier à une adresse IPv6. Par conséquent, vous devez

Activez la prise en charge d'IPv6 sur votre hôte pour Docker :

modifier / créer /etc/docker/daemon.json

{
  "ipv6" : true,
  "fixed-cidr-v6" : "2001:db8:1::/64"
}

Et redémarrez le service Docker :

service docker restart


le fixed-cidr-v6 est PAS facultatif comme https://docs.docker.com/config/daemon/ipv6/ pourrait vous faire croire.

test pour le support IPv6 :

docker run -it alpine ash -c "ip -6 addr show dev eth0 ; ip -6 route show"
s'il ne renvoie rien, alors ipv6 n'est PAS activé.
sample output with IPv6 enabled:

max@morpheus:~/docker$ docker run -it alpine ash -c "ip -6 addr show dev eth0 ; ip -6 route show"
163 : eth0@if164 : mtu 1500 state UP
     inet6 2001:db8:1::242:ac11:2/64 scope global flags 02
        valid_lft forever preferred_lft forever
     inet6 fe80::42:acff:fe11:2/64 scope link tentative
        valid_lft forever preferred_lft forever
2001:db8:1::/64 dev eth0 metric 256
fe80::/64 dev eth0 metric 256
par défaut via 2001:db8:1::1 dev eth0 metric 1024
ff00::/8 dev eth0 metric 256



Échec du démarrage de Docker Application Container Engine.

tail -n 50 /var/log/syslog

Jan 11 21:39:35 morpheus dockerd[697] : time="2019-01-11T21:39:35.770500563+01:00″ level=warning msg="Votre noyau ne supporte pas la limite de mémoire swap".
Jan 11 21:39:35 morpheus dockerd[697] : time="2019-01-11T21:39:35.770617796+01:00″ level=warning msg="Votre noyau ne prend pas en charge la période cgroup rt".
Jan 11 21:39:35 morpheus dockerd[697] : time="2019-01-11T21:39:35.770656361+01:00″ level=warning msg="Votre noyau ne prend pas en charge l'exécution de cgroup rt".

Jan 11 21:39:40 morpheus dockerd[697] : time="2019-01-11T21:39:40.800355314+01:00″ level=info msg="Le pont par défaut (docker0) est attribué avec une adresse IP 172.17.0.0/16. L'option -bip du démon peut être utilisée pour définir une adresse IP préférée"

Jan 11 21:39:40 morpheus dockerd [697] : Error starting daemon : Erreur d'initialisation du contrôleur réseau : Erreur lors de la création du réseau "bridge" par défaut : Impossible de trouver un pool d'adresses IPv6 disponible et non chevauchant parmi les valeurs par défaut à attribuer au réseau.

Si le démon docker ne démarre pas, consultez le fichier /var/log/syslog pour en trouver la raison.

Ici, cela signifie probablement que vous n'avez pas ajouté le fixed-cidr-v6 comme je l'ai indiqué ci-dessus ! Docker, depuis quelques versions, semble l'exiger. Il y a un problème dans GitHub à ce sujet.

et tout ça pour ...

image

Références

https://github.com/inversepath/usbarmory-debian-base_image/issues/9

https://docs.docker.com/v17.09/engine/userguide/networking/default_network/ipv6/

https://github.com/moby/moby/issues/36954