Jusqu'à récemment, cela fonctionnait bien
docker version Client: Docker Engine - Community Version: 19.03.11 API version: 1.40 Go version: go1.13.10 Git commit: 42e35e61f3 Built: Mon Jun 1 09:12:22 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.11 API version: 1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: 42e35e61f3 Built: Mon Jun 1 09:10:54 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
maintenant son erreur avec
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"htpasswd\": executable file not found in $PATH": unknown.
c'est sur Ubuntu 18.04 et 20.04 avec docker
docker run --entrypoint htpasswd registry:2 -Bbn myuser mypwd > /my/registry2/reg/hub/auth/htpasswd
5 Réponses :
Il continuera de fonctionner si vous épinglez le registre Docker local à
dpkg -L apache2-utils /. /usr /usr/bin /usr/bin/ab /usr/bin/checkgid /usr/bin/fcgistarter /usr/bin/htcacheclean /usr/bin/htdbm /usr/bin/htdigest /usr/bin/htpasswd /usr/bin/logresolve /usr/bin/rotatelogs /usr/sbin /usr/sbin/check_forensic /usr/sbin/httxt2dbm /usr/sbin/split-logfile /usr/share /usr/share/doc /usr/share/doc/apache2-utils /usr/share/doc/apache2-utils/changelog.Debian.gz /usr/share/doc/apache2-utils/copyright /usr/share/man /usr/share/man/man1 /usr/share/man/man1/ab.1.gz /usr/share/man/man1/htdbm.1.gz /usr/share/man/man1/htdigest.1.gz /usr/share/man/man1/htpasswd.1.gz /usr/share/man/man1/httxt2dbm.1.gz /usr/share/man/man1/logresolve.1.gz /usr/share/man/man8 /usr/share/man/man8/check_forensic.8.gz /usr/share/man/man8/checkgid.8.gz /usr/share/man/man8/fcgistarter.8.gz /usr/share/man/man8/htcacheclean.8.gz /usr/share/man/man8/rotatelogs.8.gz /usr/share/man/man8/split-logfile.8.gz
au lieu de récupérer la dernière version 2 en utilisant simplement le registry:2
pour plus de détails, voir https://github.com/GoogleContainerTools/jib/pull/2538/commits/f816c837e34eb389c2cdee1bc9a2918c5d2e33e3 et https://github.com/GoogleContainerTools/jib/pull/2539 comme référencé dans https:// docker / jib / pull/ 2539 / distribution-library-image / issues / 106
alternativement, au lieu d'exécuter htpasswd à partir du registre: 2, vous pouvez installer htpasswd binaire en utilisant
htpasswd -Bbn myuser mypwd > /my/registry2/reg/hub/auth/htpasswd
et utilisez la syntaxe
apt-get install apache2-utils # thankfully this is NOT the apache server
sur Ubuntu 18.04 ou 20.04
PS voici tous les fichiers qui proviennent du package apache2-utils ... juste quelques utilitaires pas n'importe quel serveur
registry:2.7.0
pour faire bonne mesure, j'ai réservé un billet docker sur ce https://github.com/docker/docker.github.io/issues/11060
Il existe unregistre Docker à problème ouvertavec l'authentification de base native ne fonctionnant pas . Il semble qu'ils ont supprimé htpasswd
raison de certains CVE, donc l'installation du binaire pourrait rendre votre conteneur moins sécurisé. Vous voudrez peut-être suivre ce problème jusqu'à ce qu'ils trouvent une meilleure solution.
Vous pouvez générer un mot de passe crypté à l'aide de la fonction Pearl Cry:
username:encrypted-password
Cela produira une chaîne de mot de passe cryptée. Copiez et collez la chaîne cryptée dans le fichier /path/.htpasswd
telle sorte que
perl -le 'print crypt("my-password", "my-salt")'
Vous pouvez également utiliser htpasswd -B
partir apache2-utils
packages apache2-utils
.
Exemple: htpasswd -B -b passwordfile username password
Docker nécessite que le mot de passe soit haché à l'aide de l'algorithme bcrypt, c'est pourquoi nous transmettons le paramètre -B. L'algorithme bcrypt est une fonction de hachage de mot de passe basée sur le chiffrement par bloc Blowfish, avec un paramètre de facteur de travail, qui spécifie le coût de la fonction de hachage.
J'ai ajouté ce qui suit dans mon Dockerfile et maintenant tout va bien à nouveau.
FROM registry RUN apk add --no-cache apache2-utils RUN mkdir /auth \ && htpasswd -bnB admin admin > /auth/htpasswd
Mon Dockerfile ressemble maintenant à ce qui suit.
RUN apk add --no-cache apache2-utils