J'ai installé le menu fixe sur ma machine et également le minikube qui contient un menu fixe, donc j'ai probablement deux instances de menu fixe s'exécutant sur une machine virtuelle différente
Je construis une image et la marque, puis la pousse dans le registre local et la transmet avec succès. Je peux également la retirer du registre et aussi lorsque j’exécute curl pour obtenir la liste des tags que j’ai obtenu, et voici ce que j’ai fait.
1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
4- docker Push 127.0.0.1:5000/eliza/console:0.0.1
5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list
toutes les étapes ci-dessus fonctionnent correctement, sans aucun problème.
Mon problème est quand je lance minikube et tente d'accéder à cette image dans le registre local à l'intérieur
Alors, quand je lance les prochaines commandes
1- Sudo minikube start --insecure-registry 127.0.0.1:5000
2- eval $(minikube docker-env)
3- minikube ssh
4- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list
en dernière étape (point 4) il m'a donné le message suivant
curl: (7) Échec de la connexion au port 5000 127.0.0.1: connexion refusée.
Je peux donc accéder au registre des images depuis ma machine, mais pas depuis minikube, ce qui pose bien sûr des problèmes lorsque je déploie cette image à l'aide de Kubernetes sur minikube et que le déploiement a échoué car il est impossible de se connecter à http://127.0.0.1 : 5000
Pouvez-vous m'aider à configurer minikube pour qu'il visualise mon registre local afin que mon problème soit résolu, puis-je déployer l'image sur minikube avec kubernetes avec succès?
METTRE À JOUR
J'utilise ce fichier Yaml (je l'ai nommé ConsolePre.yaml) pour déployer mon image à l'aide de kubernetes.
apiVersion: v1
kind: Service
metadata:
name: tripbru-console
labels:
app: tripbru-console
spec:
ports:
- port: 9080
targetPort: 9080
nodePort: 30181
selector:
app: tripbru-console
tier: frontend
type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tripbru-console
labels:
app: tripbru-console
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: tripbru-console
tier: frontend
spec:
containers:
- image: docker.local:5000/eliza/console:0.0.1
name: tripbru-console
ports:
- containerPort: 9080
name: tripbru-console
et quand je lance la commande suivante pour appliquer les modifications
Sudo kubectl apply -f /PATH_TO_YAML_FILE/ConsolePre.yaml
le résultat est
NAME READY STATUS RESTARTS AGE
po/tripbru-console-1655054400-x3g87 0/1 ErrImagePull 0 1m
et quand je lance la commande décris
Sudo kubectl décrit le pod tripbru-console-1655054400-x3g87
j'ai trouvé le message suivant dans le résultat de la description
Réponse d'erreur du démon: {"message": "Get https: //docker.local: 5000/v1/_ping : appelez tcp: lookup docker.local sur 10.0.2.3:53: lu udp 10.0.2.15:57792-\u003e10.0.2.3:53: délai d'attente i/o "}
et j’ai configuré docker.local xxx.xxx.xx.4 dans minikube/etc/hosts, donc je ne sais pas d’où proviennent 10.0.2.3:53 et 10.0.2.15:57792.
Alors, comment puis-je résoudre ce problème aussi.
Merci :)
Le problème réside dans votre idée d'utiliser 127.0.0.1
où vous voulez. C'est faux.
Donc, si votre IP de la machine est 192.168.0.101. Puis ci-dessous fonctionne
1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
4- docker Push 127.0.0.1:5000/eliza/console:0.0.1
5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list
Parce que docker run mappe le registre à 127.0.0.1:5000 et 192.168.0.101:5000. Maintenant, sur votre machine, seul ce 127.0.0.1
fonctionnera. Maintenant, quand vous utilisez
3- minikube ssh
Vous obtenez à l'intérieur de la machine minikube et qui n'a pas de registre en cours d'exécution sur 127.0.0.1:5000. Donc l'erreur. Le registre n’est pas accessible à l’intérieur de cette machine à l’aide de l’IP de la machine.
La façon dont je résous généralement ce problème consiste à utiliser le nom d'hôte à la fois localement et à l'intérieur des autres ordinateurs virtuels.
Donc, sur votre machine, créez une entrée dans /etc/hosts
docker.local 127.0.0.1
Et changez vos commandes en
1- docker build -t docker.local:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 docker.local:5000/eliza/console:0.0.1
4- docker Push docker.local:5000/eliza/console:0.0.1
5- curl -X GET http://docker.local:5000/v2/eliza/console/tags/list
Et lorsque vous utilisez minikube ssh
, saisissez docker.local
dans /etc/hosts
docker.local 192.168.0.101
Alors curl -X GET http://docker.local:5000/v2/eliza/console/tags/list
Edit-1
Pour le problème TLS, vous devez arrêter le service de menu fixe dans minikube.
systemctl stop docker
Puis éditez /etc/systemd/system/docker.service.d/10-machine.conf
et changez
ExecStart = démon/usr/bin/docker -H tcp: //0.0.0.0: 2376 -H unix: ///var/run/docker.sock --tlsverify --tlscacert /etc/docker/ca.pem - tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label fournisseur = virtualbox --insecure-registry 10.0.0.0/24
à
ExecStart = démon/usr/bin/docker -H tcp: //0.0.0.0: 2376 -H unix: ///var/run/docker.sock --tlsverify --tlscacert /etc/docker/ca.pem - tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider = virtualbox --insecure-registry 10.0.0.0/24 --insecure-registry docker.local: 5000 - insecure-registry 192.168.1.4:5000
Rechargez ensuite le démon et démarrez le service Docker.
systemctl daemon-reload
systemctl start docker
Après cela, essayez de tirer
docker pull docker.local:5000/eliza/console:0.0.1
Et la commande devrait fonctionner
C'est une question populaire au pays des dockers. Vois ici. https://stackoverflow.com/a/24326540/6785908 Il existe également d'autres moyens, par exemple, pour Docker sur mac, docker.for.mac.localhost
nom DNS sera résolu en machine hôte.
De https://docs.docker.com/docker-for-mac/networking/#i-cannot-ping-my-containers
Le Mac a une adresse IP changeante (ou aucune si vous n’avez pas d’accès réseau ). À partir de 17.06, nous vous recommandons de vous connecter au nom DNS spécial réservé à Mac, docker.for.mac.localhost, qui résoudra à l'adresse IP interne utilisée par l'hôte.
En supposant que l'objectif principal de ce minikube soit d'effectuer des tests locaux, il existe un moyen plus simple de déployer votre conteneur docker (cela n'a même pas besoin d'un registre docker local).
La première chose à comprendre est que, lorsque vous installez docker sur votre ordinateur, celui-ci se compose de deux parties: 1) un docker cli avec lequel vous pouvez interagir avec le docker daemon 2) un docker daemon. Dans cette méthode, nous allons pointer notre docker local cli vers le démon docker de minikube et exécuter docker build
.
citant les parties pertinentes ici
Lorsque vous utilisez un seul VM de Kubernetes, il est très pratique de réutiliser le fichier le démon Docker intégré de minikube; car cela signifie que vous n'avez pas à le faire construire un registre docker sur votre ordinateur hôte et pousser l'image dans ça - vous pouvez juste construire dans le même démon docker que minikube ce qui accélère les expériences locales. Assurez-vous de marquer votre Docker image avec autre chose que "dernière" et utilisez cette balise pendant que vous tirez l'image. Sinon, si vous ne spécifiez pas la version de votre fichier image, elle sera considérée comme la dernière en date, avec la stratégie d’image par défaut de Toujours en conséquence, ce qui peut éventuellement entraîner ErrImagePull comme vous peut ne pas avoir de version de votre image Docker dans le fichier Registre docker par défaut (généralement DockerHub) pour le moment.
Pour pouvoir travailler avec le démon docker sur votre hôte mac/linux, utilisez la commande docker-env dans votre shell:
eval $ (minikube docker-env)
Vous devriez maintenant pouvoir utiliser docker sur la ligne de commande de votre machine hôte mac/linux en conversant avec le démon docker situé dans la machine virtuelle minikube:
faire une commande de liste de conteneurs docker: docker ps
. Il devrait afficher même les conteneurs liés au système kubernetes (car votre cli est maintenant dirigé vers un démon docker sur lequel votre minikube est en cours d'exécution).
Maintenant, construisez votre image de menu fixe. Ensuite, il sera disponible dans le minikube pour vous.
Vous pouvez exécuter cette commande pour diriger votre CLI docker vers minikube: eval $ (minikube docker-env). Vous pourrez ensuite construire vos images à cet emplacement ou les exporter de n'importe où et les importer.