Donner une adresse ip routable à un conteneur docker

je suis en cours d'exécution ce sur ubuntu 14.04 et ont mis en docker0 vers une ip statique qui est ensuite acheminée vers l'ip publique via le pare-feu. J'essaie de configurer mon API backend pour qu'il fonctionne dans un conteneur docker et je suis confus par quelques choses.

1.) Comment pourrais-je cartographier docker0ip pour le conteneur de la propriété intellectuelle tels que docker0 saurait envoyer les paquets entrants au conteneur (dynamiquement si possible).

2.) Si ce n'est déjà fait de telle façon, comment pourrais-je faire pour que je n'aie pas à faire ça à chaque fois que je fais une nouvelle course de ce conteneur docker?

Merci d'avance!

24
demandé sur robert 2014-10-24 04:32:35

2 réponses

je suppose que vous voulez avoir une adresse IP assignée à votre conteneur docker en dehors de docker.

tout d'abord, créez une nouvelle IP et assignez-la à l'interface de votre hôte (nous supposons que votre interface s'appelle eth0.

$> ip addr add 10.0.0.99/8 dev eth0

Maintenant, lorsque vous allumez le conteneur, spécifiez cette adresse et liez-la à votre conteneur docker:

$> docker run -i -t --rm -p 10.0.0.99:80:8080 base

l'argument-p fera que docker créera une règle NAT iptables qui natalisera tout le trafic correspondant à la destination 10.0.0.99: 80 à votre Docker sur le port 8080.

Si vous avez besoin d'automatiser le processus et de l'échelle, consulter cette ressource: https://github.com/jpetazzo/pipework

Le panneau de documentation est un bon début: https://docker.github.io/engine/userguide/networking/

38
répondu nucatus 2016-10-10 11:16:36

récemment j'ai eu le même problème et je l'ai résolu en utilisant Conteneurs Réseau:

  • Début de mon "service" conteneur que je veux être disponible sur l'adresse IP publique
  • créer un nouveau conteneur "réseau" qui est relié au conteneur de service et fait le routage vers les ports exposés par le conteneur de service. Ce conteneur disposera d'une interface réseau supplémentaire reliée à l'hôte afin qu'il puisse acquérir une IP à partir de DHCP.
  • Créer un réseau passerelle entre l'hôte Docker et le conteneur à L'aide de la tuyauterie de jpetazzo (https://github.com/jpetazzo/pipework)
  • le conteneur réseau acquiert une adresse de DHCP.

à partir de ce point sur le réseau le conteneur est disponible sur le réseau et achemine les ports au service conteneur. Le principal avantage est que le conteneur "service" n'a pas à connaître L'IP publique, DHCP, etc. De cette façon, chaque conteneur courant peut être rendu public sur réseau.

Pour plus de commodité, j'ai créé un script qui fait tout cela à la fois. Rendre un conteneur courant disponible sur une IP publique est aussi simple que:

create-network-container.sh webserver ens32

dans ce cas, vous devez avoir un conteneur en cours d'exécution appelé 'webserver', et une interface réseau sur l'hôte 'ens32'. L'interface est nécessaire pour créer le pont dans le réseau conteneur.

Le script, des informations plus détaillées et des exemples sont disponibles sur: https://github.com/jeroenpeeters/docker-network-containers

9
répondu Jeroen Peeters 2014-11-18 20:02:59