Installare Crystal su Docker: come aggiungere il repository Crystal a Docker nel Dockerfile
Dockerfile (estratto)
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
Eseguire apt-get update && apt-get install -y \
software-proprietà-comune \
costruire-essenziale \
libevent-dev -
libssl-dev \
libxml2-dev \
libyaml-dev \
libgmp-dev -
libreadline-dev -
apt-trasporto-https \
iputils-ping \
git \
attitudine \automatica \automatica
nano ■
openssh-server \
&& apt-key adv -keyserver keys.gnupg.net -recv-keys 09617FD37CC06B54 \
&& add-apt-repository 'deb https://dist.crystal-lang.org/apt cristallo principale".
&& apt-get update \
&& apt-get install -y crystal \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir /root/.ssh
Il ENV APT_KEY_DONT_WARN_ON_DANGEROUSE_USAGE è necessario per apt-key adv non soffocare per non essere eseguito da un terminale.
Per aggiungere il repository Crystal, la chiave deve essere installata
W: errore GPG: https://dist.crystal-lang.org/apt cristallo InRelease: Le seguenti firme non possono essere verificate perché la chiave pubblica non è disponibile: NO_PUBKEY 09617FD37CC06B54
E: il deposito 'https://dist.crystal-lang.org/apt crystal InRelease' non è firmato.
Quando si aggiunge la chiave usando un Dockerfile, si potrebbe ottenere il seguente messaggio di errore:
Esecuzione: /tmp/apt-key-gpghome.daecBAEPSJ/gpg.1.sh -keyserver keys.gnupg.net -recv-keys 09617FD37CC06B54
gpg: ricezione keyserver fallita: Impossibile assegnare l'indirizzo richiesto
Questo è dovuto al fatto che gpg non è in grado di legarsi a un indirizzo IPv6. Perciò dovete
abilitare il supporto IPv6 sul vostro host per Docker:
modificare / creare /etc/docker/daemon.json
{ "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" }
E riavviare il servizio docker:
servizio docker restart
il fisso-cidr-v6 è NON opzionale come https://docs.docker.com/config/daemon/ipv6/ potrebbe farvi credere.
test per il supporto IPv6:
docker run -it alpine ash -c "ip -6 addr show dev eth0; ip -6 route show"
se non restituisce nulla, allora ipv6 NON è abilitato.
esempio di output con IPv6 abilitato:
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 per sempre preferred_lft per sempre
inet6 fe80::42:acff:fe11:2/64 scope link tentative
valid_lft per sempre preferred_lft per sempre
2001:db8:1::/64 dev eth0 metrica 256
fe80::/64 dev eth0 metrica 256
default via 2001:db8:1::1 dev eth0 metrica 1024
ff00::/8 dev eth0 metrica 256
Fallito l'avvio di 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="Il tuo kernel non supporta il limite di memoria swap"
Jan 11 21:39:35 morpheus dockerd[697]: time="2019-01-11T21:39:35.770617796+01:00″ level=warning msg="Il tuo kernel non supporta cgroup rt period"
Jan 11 21:39:35 morpheus dockerd[697]: time="2019-01-11T21:39:35.770656361+01:00″ level=warning msg="Il tuo kernel non supporta cgroup rt runtime"
Jan 11 21:39:40 morpheus dockerd[697]: time="2019-01-11T21:39:40.800355314+01:00″ level=info msg="Il bridge predefinito (docker0) è assegnato con un indirizzo IP 172.17.0.0/16. L'opzione del demone -bip può essere usata per impostare un indirizzo IP preferito"
11 gen 21:39:40 morpheus dockerd[697]: Errore nell'avviare il demone: Error initializing network controller: Errore nella creazione della rete "bridge" predefinita: impossibile trovare un pool di indirizzi IPv6 disponibile e non sovrapposto tra quelli predefiniti da assegnare alla rete
Se il demone docker non parte, guarda in /var/log/syslog per trovare la ragione.
Qui probabilmente significa che non avete aggiunto il fixed-cidr-v6 come indicato da me sopra! Docker, da un paio di versioni, sembra richiedere questo. C'è un problema in GitHub su di esso.
e tutto questo per ...
Riferimenti
https://github.com/inversepath/usbarmory-debian-base_image/issues/9
https://docs.docker.com/v17.09/engine/userguide/networking/default_network/ipv6/