21
votes

registre local de docker "exec: \" htpasswd \ ": fichier exécutable introuvable dans $ PATH"

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


0 commentaires

5 Réponses :


33
votes

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


0 commentaires

0
votes

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.


0 commentaires

0
votes

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")'


0 commentaires

1
votes

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.

Commentaire de: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-top-of-digitalocean-spaces-and-use-it-with -digitalocean-kubernetes


0 commentaires

0
votes

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


0 commentaires