[RESOLU] Problème de date sur docker avec raspbian

Tags: #<Tag:0x00007f509f6e26b0>

Bonjour,

Je ne suis pas sur que ca soit le bon endroit mais dans le doute je demande.

J’ai un raspberry sur lequel j’utilise docker. Impossible de faire fonctionner les images alpine linux parce que la date dans le conteneur n’est pas bonne.

Lorsque je lance le conteneur avec un --privileged, la date est correcte mais je souhaite l’utiliser avec un docker-compose et je ne trouve pas comment faire. J’ai mis mon docker-compose en version 3.6 ( pas possible d’aller plus haut ) et j’ai rajouté un « privileged:true » mais ca n’a rien changé.

Voici le docker-compose que j’utilise :

docker@home:~/test$ cat docker-compose.yml
version: "3.6"
services:
    test:
        build:          "./"
        restart:        "always"
        privileged:     true
        network_mode:   "host"
docker@home:~/test$

Et le résultat du docker-compose build :

docker@home:~/test$ docker-compose build --no-cache
Building test
Step 1/3 : FROM alpine
 ---> 9c74a18b2325
Step 2/3 : RUN date
 ---> Running in 8d635fb5b046
Sun Jan  0 00:100:4174038  1900
Removing intermediate container 8d635fb5b046
 ---> ae82494a09fc
Step 3/3 : RUN apk update && apk upgrade
 ---> Running in 7ffc981ae731
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/armv7/APKINDEX.tar.gz
1996415888:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996415888:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996415888:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996415888:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996415888:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913:
ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/main: Permission denied
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/armv7/APKINDEX.tar.gz
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: No such file or directory
ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/community: temporary error (try again later)
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/community: No such file or directory
2 errors; 14 distinct packages available
ERROR: Service 'test' failed to build: The command '/bin/sh -c apk update && apk upgrade' returned a non-zero code: 2
docker@home:~/test$

Est-ce que vous auriez une idée ? Lorsque je le fais avec une debian le problème ne se pose pas mais pour l’instant c’est sur de l’alpine que je souhaite passer.

Merci d’avance.

Alors en premier lieu --privileged c’est fortement caca lorsque l’on fait du docker :confused:

En second je vois pas le problème de date avec ton build par contre je vois des problèmes pour atteindre les dépôts Alpine qui sont assez parfois indisponible.

Le certificat SSL du dépôt est refusé par mon conteneur parce que la date à laquelle il a été émis est antérieur à la date courante.

Lorsque je lance le conteneur en mode privileged ( je suis du même avis, je ne veux pas l’utiliser mais jusqu’ici je n’ai pas trouvé d’autre solution :-/ ) le certificat est accepté.

Je ne vois pas comment je peux définir manuellement la date pour qu’elle soit valide pour l’utilisation d’apk, faire l’installation des packages de base et configurer correctement le conteneur.

Merci d’avance !

Oui mais ça merde au momment de l’update du cache de paquets, pourquoi vouloir faire cette étape, si tu cherche à utiliser la version Alpine 3.13 tu n’as pas besoin de récupérer des paquets plus à jour oO

Je dois avoir utilisé cette recette pour installer vite fait un proxy Zabbix la semaine dernière et je n’ai nullement besoin de me soucier de savoir si un update à été fait … bon à la différence que je compile la partie Zabbix, mais tout les paquets nécessaires s’étaient intsallés en amont sans souci.

t’a moyen de me faire voir ton fichier compose ?

Après je suppose que Docker a été installé correctement et fonctionne ?

Dernière question Alpine étant très très light si tu a besoin d’avoir la date as-tu au préalable installé tzdata, il est nécessaire … si tu cherche à bricoler coreutils sera aussi surement de la partie.

PS : Construire une image Docker c’est pour rester light, si tu commence à avoir besoin de pas mal de truc c’est sans doute le moment de réfléchir à ce dont tu as vraiment besoin et de penser en micro service (qui évolueront plus simplement dans le temps).

Merci pour ta réponse

je ne peux rien installer du tout, un simple « apk add » exécuté directrement pose problème de la même manière :

docker@home:~/test$ docker-compose build --no-cache
Building test
Step 1/3 : FROM alpine
 ---> 9c74a18b2325
Step 2/3 : RUN apk add tzdata
 ---> Running in 73ad299f4e84
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/armv7/APKINDEX.tar.gz
1996297104:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996297104:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996297104:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996297104:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996297104:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913:
ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/main: Permission denied
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: No such file or directory
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/armv7/APKINDEX.tar.gz
1996297104:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996297104:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996297104:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996297104:error:0D0D90AD:asn1 encoding routines:ASN1_TIME_adj:error getting time:crypto/asn1/a_time.c:330:
1996297104:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913:
ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/community: Permission denied
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/community: No such file or directory
ERROR: unable to select packages:
  tzdata (no such package):
    required by: world[tzdata]
ERROR: Service 'test' failed to build: The command '/bin/sh -c apk add tzdata' returned a non-zero code: 1
docker@home:~/test$ 

Le même en privileged fonctionne très bien :

docker@home:~/test$ docker run -ti --privileged alpine sh
/ # apk add tzdata
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/armv7/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/armv7/APKINDEX.tar.gz
(1/1) Installing tzdata (2021a-r0)
Executing busybox-1.32.1-r3.trigger
OK: 7 MiB in 15 packages
/ #
docker@home:~/test$

C’est toujours le même docker-compose que j’utilise :

docker@home:~/test$ cat docker-compose.yml
version: "3.6"
services:
    test:
        build:          "./"
        restart:        "always"
        privileged:     true
        network_mode:   "host"
docker@home:~/test$

En mode non privilégié, j’ai tenté de mettre la date à jour mais ca ne m’est pas permis :

/ # date -s "2021-02-25 09:00:00"
date: can't set date: Operation not permitted
Thu Feb 25 09:00:00 UTC 2021
/ # date
Sun Jan  0 00:100:4174038  1900
/ #

Est-ce qu’il y a une autre manière de le faire ?

Docker va me servir avant tout à isoler des services. Des programmes que je veux installer et pouvoir réinstaller de manière rapide et/ou identique sur plusieurs hosts. J’ai donc besoin de pouvoir utiliser apk pour ne pas avoir a tout refaire a la main.

Merci d’avance.

date -s "2021-02-25 09:00:00"

Je suis pas certains que la version de date présente dans Alpine soit capable de ça.

Maintenant je me pose la question car je n’ai pas reproduis ton type de problème cet après midi au taff sur un docker de dispo …
et si tu fixe la time zone etc dans un env pour le build ça passe ?

J’ai pu trouver une solution, c’est la libseccomp2 qui n’est pas a jour sur rasbian buster et docker qui doit passer dans une version suppérieure pour en tenir compte. Pour ne pas plagier, voici la page qui m’a donné la solution :

maintenant la date est correcte lorsque je lance un conteneur alpine, je peux donc faire des apk update.

Merci pour votre temps !

1 J'aime