J'exécute cela sur Ubuntu 14.04 et j'ai défini docker0
Sur une IP statique qui est ensuite acheminée vers l'IP publique via le pare-feu. J'essaie de configurer mon API dorsale pour qu'elle s'exécute dans un conteneur Docker et je suis confus par deux ou trois choses.
1.) Comment mapper l'IP de docker0
À l'IP du conteneur de telle sorte que docker0
Sache envoyer les paquets entrants au conteneur (dynamiquement si possible).
2.) Si ce n'est pas déjà fait de cette manière, comment pourrais-je faire en sorte que je n'aie pas à le configurer à chaque fois que je refasse ce conteneur docker?
Merci d'avance!
Je suppose que vous voulez avoir une adresse IP attribuée à votre conteneur Docker en dehors de Docker.
Créez d'abord une nouvelle adresse IP et affectez-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 lancez 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 obligera docker à créer une règle iptables NAT qui natera tout le trafic correspondant à la destination 10.0.0.99:80 à votre conteneur docker sur le port 8080.
Si vous avez besoin d'automatiser le processus et de le faire évoluer, consultez cette ressource: https://github.com/jpetazzo/pipework
La documentation de docker est un bon début: https://docker.github.io/engine/userguide/networking/
Récemment, j'ai eu le même problème et l'ai résolu en utilisant Conteneurs réseau :
À partir de ce moment, le conteneur réseau est disponible sur le réseau et achemine les ports vers le conteneur de service. Le principal avantage est que le conteneur "service" n'a pas besoin de connaître l'adresse IP publique, DHCP, etc. De cette façon, chaque conteneur en cours d'exécution peut être rendu public sur le réseau.
Pour plus de commodité, j'ai créé un script qui fait tout cela en même temps. Rendre un conteneur en cours d'exécution disponible sur une IP publique est aussi simple que:
create-network-container.sh webserver ens32
Dans ce cas, vous devez disposer d'un conteneur en cours d'exécution appelé "serveur Web" et d'une interface réseau sur l'hôte "ens32". L'interface est nécessaire pour créer le pont dans le conteneur réseau.
Le script, des informations plus détaillées et des exemples sont disponibles sur: https://github.com/jeroenpeeters/docker-network-containers