2017-05-23 1 views
0

J'essaie d'utiliser Docker dans le cadre de ma suite de tests. J'ai 2 conteneurs mis en place comme:Docker conteneur de montage d'une base de données à partir d'un autre conteneur

version: "3" 
services: 

    mongo_3_4: 
    image: mongo:3.4 
    command: ["mongod", "--smallfiles"] 
    ports: 
     - "27021:27017" 

    frontend: 
    build: 
     context: ./Dockerfiles/path/ 
     dockerfile: Dockerfile 
    ports: 
     - "63175:63175" 

Le frontend a la possibilité de monter un MongoDB où je dois lui donner des informations d'identification d'hôte et le port, par exemple, j'utiliser localement localhost | 27021 et mon db serait monté .

La seule façon de le faire fonctionner est d'obtenir l'adresse IP de la machine hôte. J'ai réalisé cela en faisant comme décrit here: $ ipconfig getifaddr en0

obtenant ainsi la machine hôte IP et l'utiliser pour monter mon db du frontend-à-dire 192.168.1.42 | 27021

Le problème que j'ai est cet hôte IP sera différent sur les différents environnements comme il est utilisé dans le cadre d'une suite de tests. Il serait utilisé sur diverses machines locales avec différents systèmes d'exploitation et dire Travis-ci.

Existe-t-il une méthode recommandée pour coder en dur cette adresse IP hôte à partir de docker ou devrais-je créer un script qui fonctionne sur l'hôte et le faire sudo ifconfig lo0 alias 192.168.46.49?

Apparemment trop compliqué quand tout ce que je fais est d'avoir 2 conteneurs et que je veux que l'un d'entre eux puisse monter le db de l'autre?

+0

Ceci est basique [Docker Networking] (https://docs.docker.com/engine/userguide/networking/). Jetez un coup d'oeil à [cette réponse] (https://stackoverflow.com/a/34728404/174843) pour un résumé. –

Répondre

1

L'hôte qui exécute docker est par défaut: 172.17.0.1. Avez-vous essayé cela? (Qui est l'hôte local de votre ordinateur, grosso modo)

En outre, vous pouvez lier des conteneurs et obtenir des avantages des réseaux docker:

version: "3" 
services: 

    mongo_3_4: 
    image: mongo:3.4 
    command: ["mongod", "--smallfiles"] 
    ports: 
     - "27021:27017" 

    frontend: 
    build: 
     context: ./Dockerfiles/path/ 
     dockerfile: Dockerfile 
    ports: 
     - "63175:63175" 
    links: 
     - mongo_3_4:mongo 

Ensuite, vous pouvez accéder à partir frontend à mongo comme ceci: mongo:27017

+0

merci cela a fonctionné comme un charme lors de l'utilisation de l'option 'links'. Toujours pas en mesure d'utiliser 'localhost' mais je suis plus qu'heureux d'être capable de' mongo: 27017' une question rapide mais comment se fait-il qu'il n'utilise pas le port '27021'? – cmdv

+0

mongo écoute 27017 sur l'adresse IP interne du conteneur interne (peut-être 172.17.0.X), donc 'mongo' résout ce IP à partir de' frontend', grâce au 'link'. Le port 27021 est disponible pour ** l'hôte ** (vos interfaces, c'est-à-dire votre hôte local) et n'est pas disponible dans l'adresse IP interne du conteneur. Est-ce que ça fait du sens? – Robert

+0

Vous pouvez donc sortir 'ports' du service mongo_3_4. Frontend sera toujours en mesure d'accéder à mongo – Robert