Comment obtenir un Panneau contenant l'adresse IP de l'hôte?
Est-il une commande que j'pouvez exécuter pour obtenir le conteneur adresse IP du droit de l'hôte après un nouveau conteneur est créé?
Fondamentalement, une fois le Panneau crée le conteneur, je veux rouler mon propre code de déploiement et de configuration du conteneur de scripts.
- Je voulais juste être sûr que les autres noobs ne faites pas mon erreur et essayez d'obtenir l'adresse IP à partir de l'image plutôt que sur le contenant. S'assurer que vous obtenez le CID ou le numéro du conteneur et de la requête; CID par l'intermédiaire du 'docker ps" qui.
- Comment obtenir vice-versa? IP de l'hôte ou de l'appel de conteneur?
Vous devez vous connecter pour publier un commentaire.
La
--format
option d'inspecter vient à la rescousse.Moderne Docker client syntaxe:
Vieux Docker client syntaxe:
Qui sera de retour juste l'adresse IP.
Comme mentionné dans les commentaires: si vous êtes sur Windows, utilisez les guillemets
"
au lieu de guillemets simples'
autour des accolades.<no value>
réponse sur un Mac à l'aide de la Fig/Boot2Dockerinspect
commande correspondent à des images qui n'ont évidemment pas d'IP!<no value>
si vous essayez d'exécuter ce à l'encontre d'un conteneur qui n'est pas en cours d'exécution. Assurez-vous que votre conteneur est en cours d'exécution avant de le faire.{{ .NetworkSettings.Networks.$network.IPAddress }}
. La valeur par défaut semble être le pont, mais en vertu de docker-composer ce sera un nom spécifique qui dépend du nom de votre application (je pense à partir de la --projet de nom de drapeau, mais qui va aussi dépendre de ce type de mise en réseau configuration que vous avez mis en place). J'ai écrit une réponse complète dans une réponse ici stackoverflow.com/questions/17157721/...docker inspect <container id> and scroll down you will find the container ip-address
Vous pouvez utiliser
docker inspect <container id>
Exemple:
docker inspect $CID | grep IPAddress | cut -d '"' -f 4
, il fonctionne très bien 🙂alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
est la nouvelle syntaxe.-format
est obsolète, il devient--format
.docker inspect --format '{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}' ${CID}
docker inspect 5dfb2e7bfe83 | findstr /i address
n'a pas d'adresse de retour, avec la même valeur, comme indiqué dans la kitematic. L'adresse indiquée dans kitematic œuvres. L'adresse indiquée par l'inspecter de commande ne fonctionne pas.De la première à obtenir le numéro du conteneur:
(Première colonne est pour l'ID de conteneur)
Utiliser le numéro du conteneur pour l'exécution:
En bas,sous "NetworkSettings", vous pouvez trouver des "IPAddress"
Ou tout Simplement faire:
docker run -it MYCONTAINER /bin/bash
), la sortie deinspect
a pas de sectionNetworkSettings
!docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
docker inspect <ID> | jq -r .[0].NetworkSettings.IPAddress
... | grep IP
solution à tous les détails de mise en page nécessaire pour obtenir de la propriété intellectuelle. +1docker run -it MYIMAGE
(qui n'est pas un container nom); si vous nedocker inspect MYIMAGE
, vous obtiendrez des informations statiques sur le image. Vous devez trouver le nom de l'exécution de conteneur (ou utiliser son id que d'autres suggèrent). Sur mon système, le premier conteneur créé à partir de cette image par défaut nomMYIMAGE_1
, doncdocker inspect MYIMAGE_1
a NetworkSettings.NetworkSettings
section.docker inspect CONTAINER_ID | grep "IPAddress"
Si vous ajoutez
-i
à grep, IPAddress boîtier peut être quelque chose comme ce qui suit:docker inspect CONTAINER_ID | grep -i "IPADDress"
Pour obtenir des contenants de tous les noms et leurs adresses IP en une seule commande.
Si vous utilisez
docker-compose
la commande sera présent:La sortie sera:
{{.NetworkSettings.IPAddress }}
à{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
Ajouter ce script shell dans votre
~/.bashrc
ou fichier:Ensuite, pour obtenir une adresse IP d'un conteneur, il suffit de faire ceci:
Pour la nouvelle version de l'Docker, veuillez utiliser les informations suivantes:
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
source ~/.bash_profile
Afficher tous les conteneurs adresses IP:
Dans le Panneau de 1,3+, vous pouvez également le vérifier par les étapes ci-dessous:
Entrer dans la course Docker (Linux):
Pour windows:
docker exec [container-name-or-id] ip a
docker exec [container-id or container-name] ipconfig
De Docker version 1.10.3, construire 20f81dd
À moins que vous dit le Panneau autrement, Docker toujours lancements de vos conteneurs dans le réseau du pont. Donc vous pouvez essayer cette commande ci-dessous:
Qui renvoie ensuite une section Conteneurs qui affiche l'adresse IP pour que l'exécution d'un conteneur.
Exécuter:
Cette affiche active docker images:
Utiliser le CONTENEUR de la valeur de l'ID:
"172.17.0.2"
En fonction des réponses que j'ai aimé, j'ai décidé de les fusionner pour une fonction permettant d'obtenir toutes les adresses IP et un autre pour un conteneur spécifique. Ils sont maintenant dans mon
.bashrc
fichier.La première commande donne l'adresse IP de tous les récipients et le second un conteneur spécifique de l'adresse IP.
De référence des conteneurs par nom:
Puis saisir l'adresse IP de l'adresse par le nom:
J'ai écrit ce script Bash pour obtenir un tableau d'adresses IP de tous les conteneurs de l'exécution sous
docker-compose
.Vous devez modifier la variable de réseau de votre propre nom de réseau.
Docker est faite à l'interne en Go et il utilise Aller syntaxe de l'interrogation trop.
Pour l'inspection sur l'adresse IP d'un conteneur particulier, vous devez exécuter la commande(-f pour l'option format)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id_or_name
Pour l'id de conteneur ou d'un nom, vous pouvez exécuter la commande
docker container ls
.Il donnera la liste en bas de chaque course conteneur.
Ici, c'est une solution que j'ai développé aujourd'hui en Python, en utilisant le "docker inspecter les conteneurs" sortie JSON comme la source de données.
J'ai beaucoup de conteneurs et d'infrastructures que j'ai à inspecter, et j'ai besoin d'obtenir de base du réseau de l'information à partir de n'importe quel contenant, dans un rapide et assez manière. C'est pourquoi j'ai fait ce script.
IMPORTANT: Depuis la version 1.9, Docker permet de créer de multiples réseaux et les attacher à de la conteneurs.
Le résultat est juste comme ceci:
Réponse rapide (Cela fonctionne):
Obtenir votre Nom de conteneur ou ID:
Puis le faire (get IP):
Obtenir Port:
Les travaux ci-dessus si le conteneur est déployé à la valeur par défaut du réseau du pont.
Toutefois, si vous utilisez une passerelle personnalisé réseau ou d'un réseau de superposition, j'ai trouvé le ci-dessous pour mieux travailler:
D'étendre ko-dos " réponse, voici un alias de la liste de tous les conteneur noms et leurs adresses IP:
docker ps -q
pour éviter latail
, et--format
pour éviter le grep. Aussi, vous pouvez passer plusieurs identificateurs de conteneurs àdocker inspect
plutôt que de boucle dans le shell.docker ps -q
affiche uniquement le conteneur des Id numériques, mais je pense que l'utilisation de leur nom, c'est mieux.tail
est uniquement pour se débarrasser de la première ligne (en-tête de table) & est toujours nécessaire. Je pourrais utiliser--format
, si:docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done
. Mais cela ne semble pas être une grande amélioration... lagrep
était plus lisible de l'OMI.docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
Si vous avez installé le Panneau en utilisant le Panneau de boîte à outils, vous pouvez utiliser le Kitematic application pour obtenir le conteneur adresse IP:
docker inspect
ne fonctionne pas lorsque vous exécutez le panneau de boîte à outils. Il signale une adresse IP, mais ce n'est pas la bonne adresse de vos services.Pour obtenir l'adresse IP de l'hôte et le port d'un conteneur:
De sortie:
NOTE!!!!! pour Docker Composer Utilisation:
Depuis le Panneau de Composer crée un réseau isolé pour chaque cluster, les méthodes ci-dessous ne fonctionne pas avec
docker-compose
.Le plus élégant et le plus simple est de définir une fonction shell la plus voté réponse @WouterD de l':
Docker peut écrire contenant les id dans un fichier comme les programmes Linux:
En cours d'exécution avec
--cidfile=filename
paramètre, Docker dumps l'ID du conteneur à ce fichier.Docker s'exécute PID Article équivalent
À l'aide du fichier PID
--cidfile
paramètre,app.cid
contenu du fichier est comme ci-dessous:a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
Vous pouvez utiliser le contenu des fichiers pour inspecter les conteneurs Docker:
➜ blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
Extraire le Conteneur IP inline script Python:
$ docker inspect `cat app.cid` | python -c "import json;import sys;\
sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])"
172.17.0.2
Plus Conviviale Forme
http://networkstatic.net/10-examples-of-how-to-get-docker-container-ip-address/
Ici il y a 10 alternatives d'obtenir le Panneau contenant les adresses IP.
Pour windows 10:
- Je utiliser ce moyen simple
e.g
Juste pour être complet:
J'aime vraiment le --format option, mais au début, je n'étais pas au courant de cette option, j'ai donc utilisé une simple Python one-liner pour obtenir le même résultat:
Combinant les réponses précédentes à trouver le numéro du conteneur basé sur le Docker nom de l'image.
Pour ceux qui sont venus de Google pour trouver la solution pour l'exécution d'une commande du terminal (pas par script), jid (interactive JSON forer vers le bas util avec la saisie semi-automatique et suggestion) vous permettent d'obtenir la même chose avec moins de frappe.
Type tab .Net tab et vous verrez suivantes:
Type .IPA tab et vous verrez suivantes:
Utilisation:
$ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
172.17.0.2
Pour Windows conteneurs utilisation
où
<container>
est le nom ou la id du conteneur.Vous pouvez utiliser
docker ps
pour trouver l'id du conteneur.Si vous avez oublié le numéro du conteneur ou ne voulez pas manipuler les commandes du shell, il est préférable d'utiliser l'INTERFACE utilisateur comme Portainer.
https://portainer.io/
Là, vous pouvez trouver toutes les informations sur le conteneur de propriété intellectuelle.
Ce sera la liste de tous les conteneur IPs sur l'hôte:
Docker inspecter les utiliser pour l'impression de tous les conteneurs de l'ips et de ses noms respectifs
Personne n'a proposé le menu fixe à l'API Python encore. Docker API solution pour obtenir l'Adresse IP est assez simple.
*NIX système d'exploitation basé sur: docker api 3.7 (mis à jour grâce à canadadry d'après les commentaires)
OS Agnostique: docker api 4.0.x (ajoutée grâce à pds d'après les commentaires)
N'était pas trop dur à trouver, mais c'est utile. en outre, cela peut être facilement modifié pour trouver toutes les adresses IP attribuées à un conteneur sur les différents réseaux.
docker.APIClient
est maintenantdocker.DockerClient
.docker==4.0.2
dans le pep, et j'ai besoin dedocker.APIClient
.4.0.x
et OS agnostique solution estclient = docker.from_env();
client.containers.get(container_name);
puisvars( container )["attrs"]["NetworkSettings"]["Networks"]["<NETWORK_NAME>"]["IPAddress"]
Inspecter n'a pas fonctionné pour moi. Peut-être que j'ai été en utilisant
-net host
et certains espaces de noms.De toute façon, j'ai trouvé que cela fonctionne bien:
J'ai dû extraire le panneau contenant son Adresse IP par docker nom de conteneur pour une autre utilisation dans des scripts de déploiement.
Pour cet effet, j'ai écrit la commande bash suivante:
Suppose que cela pourrait être pratique pour le mettre dans un script bash qui pourrait s'attendre my_container_name comme argument...
Par exemple:
La accepté de répondre ne fonctionne pas bien avec de multiples réseaux par récipient:
La prochaine meilleure réponse est plus proche:
J'aime utiliser
jq
pour analyser le réseau JSON:Pour lister les adresses IP de chaque conteneur devient alors:
Ce script obtenez de l'adresse IPv4 pour tous les conteneurs sans traitement supplémentaire ou l'interprétation des résultats. Si vous ne voulez pas le nom du conteneur ainsi, vous pouvez simplement supprimer le "echo-n $NOM:" la ligne. Idéal pour l'automatisation ou de remplissage des variables.
vous suffit de créer un alias de trop si tu voulais comme ceci:
alias dockerip="docker ps --format {{.Names}} | xargs -L1 -I{} bash -c \"echo -n \{}:; docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' {}\""
Avec la accepté de répondre si vous avez besoin d'un alias pratique pour obtenir un conteneur spécifique ip utiliser cet alias
et alors vous pouvez obtenir votre conteneur ip avec
Vous pouvez également utiliser containerid au lieu de nomconteneur
BTW acceptée grande réponse doenst produire un propre de sortie donc j'ai édité et en l'utilisant comme cela ;
Si vous voulez voir rapidement tous Docker adresses IP, ou sans avoir à taper le nom de l'instance, vous pouvez pirater le
docker ps
commande en ajoutant ceci à votre~/.bashrc
fichier:Cela provient d'une proposition par Andrew Johnstone au Docker GitHub:
https://github.com/docker/docker/issues/8786
Essayer dans Windows PowerShell:
Ci-dessus est pour windows conteneurs où un réseau a été mis en place avec un
La accepté de répondre couvre exactement quel type assez bien, mais ici, c'est une amélioration mineure:
Il utilise le
docker container inspect
au lieu de la plus génériquedocker inspect
depuis le panneau se déplace à un substantif+verbe syntaxe dans leurs commandes, et la suppression de l'ambiguïté de ce que vous inspectez. J'ai aussi inclus un espace après l'adresse IP depuis les conteneurs peuvent être sur plus d'un docker du réseau avec plus d'une adresse IP. Qui pourraient être remplacés par n'importe quel autre caractère ou une chaîne qui fait sens pour vous.Pour ceux qui veulent savoir comment ils peuvent rechercher d'autres valeurs, j'utilise souvent le suivant à sortir n'importe quel support formaté syntaxe en json:
Vous devrez peut-être installer
jq
pour que cela fonctionne, ou vous pouvez laisser de côté la fin de commande pour lire le json comme une seule longue ligne. Lors de la visualisation de cette sortie, vous pouvez voir chaque nom de la clé et c'est aux parents de sorte que vous pouvez créer vos propres chaînes de format de sortie que vous voulez. Le format de la syntaxe est mis en œuvre avec golang du modèle avec certains extra docker fonctions spécifiques inclus.La principale raison de ma réponse à ce commentaire, qui a un énorme drapeau rouge pour moi. Il indique que vos images ne contiennent pas tout ce qui est nécessaire pour exécuter votre application, un grand anti-modèle lorsque l'on travaille avec des conteneurs. Avec une douzaine de clients depuis de nombreuses années, je n'ai pas encore trouver une utilisation dans le monde réel de cas de se connecter directement à un conteneur interne adresse IP à partir du panneau d'accueil qui n'ont pas une meilleure option. Au lieu de cela, si il y a de post-configuration de démarrage dans votre conteneur qui doit s'exécuter, cela se fait souvent avec un point d'entrée script.
Il y a aussi un drapeau rouge que vous êtes en contournant le panneau du modèle de mise en réseau. Avec le panneau de réseautage, il y a deux options. Tout d'abord, lors de la communication entre les conteneurs, c'est fait avec un utilisateur a créé un réseau et l'utilisation de docker est intégré dans le système DNS pour se connecter à la boîte par nom ou l'alias de réseau plutôt que par une adresse IP qui allait changer lorsque le conteneur est recréé. Et pour communiquer à partir de l'extérieur de menu fixe pour le conteneur, ce qui est fait par la publication d'un port à partir du panneau d'accueil pour le conteneur, et ensuite la connexion à l'hôte sur le port plutôt que le contenant. Si vous vous en tenez à ces deux options, vous devriez être en mesure d'accéder à votre demande, sans jamais connaître son adresse IP interne.
ips=($(docker container inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' test-apache)) ; host=${ips[0]}
docker inspect MY_CONTAINER | jq -r '.[].NetworkSettings.Networks[].IPAddress'
plus
moins
Vérifier ce script: https://github.com/jakubthedeveloper/DockerIps
Il retourne contenant les noms avec leurs adresses IP dans le format suivant:
cela a fonctionné pour moi, je suis en cours d'exécution sur docker-boîte à outils 18.09.3, à windows 10 home edition:
type de commande "docker-machine ls'
λ docker-machine ls
NOM DU CONDUCTEUR ACTIF DE L'ÉTAT URL ESSAIM DOCKER ERREURS
par défaut * virtualbox Exécutant tcp://192.168.98.100:2376 v18.09.6
ce serait montrer la véritable adresse IP dans l'URL de la colonne. E. g. '192.168.98.100'
À L'Aide De
Python
NouveauAPI
:docker inspect <container id> | grep -i "ipaddress"