J'essaie d'accéder à ma base de données mongo sur docker avec adminmongo .
Voici mon docker-compose.yml
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c27d4a89254 mrvautin/adminmongo "/bin/sh -c 'node apâ¦" 38 seconds ago Up 33 seconds 1234/tcp iris_adminmongo_1_544d9a6f954c 2a7496a8c56a mongo "docker-entrypoint.sâ¦" 40 minutes ago Up 38 seconds 6016/tcp, 27017/tcp iris_mongo_1_7f00356a3adc
Quand je fais un docker-compose up
, tout fonctionne très bien, adminmongo me renvoie également ceci: adminmongo_1_544d9a6f954c | adminMongo écoute sur l'hôte: http: // localhost: 1234
Mais quand je vais à localhost: 1234
mon navigateur me dit que cette page n'existe pas.
Voici ce qu'un docker ps
me renvoie:
version: '3' services: mongo: image: mongo volumes: - ~/data:/data/db restart: always expose: - 6016 adminmongo: image: mrvautin/adminmongo expose: - 1234 links: - mongo:mongo
3 Réponses :
Vous devez exposer votre service au monde extérieur comme ceci:
version: '3' services: mongo: image: mongo volumes: - ~/data:/data/db restart: always adminmongo: image: mrvautin/adminmongo ports: - 1234:1234
Vous pouvez maintenant accéder à votre adminmongo par http: // localhost: 1234 .
Et vous n'avez pas à utiliser de liens ici. Depuis, compose crée un réseau et joint tous les services dans les fichiers de composition. Vous pouvez accéder à d'autres conteneurs avec leurs noms de service.
Ça ne marche pas. J'ai une erreur avec exposer: - 1234: 1234
donc je l'ai changé en ports: - 1234: 1234
, maintenant je n'ai aucune erreur mais c'est toujours le même problème, je ne peux pas accéder à localhost: 1234
J'ai oublié de le changer en ports
.
J'ai trouvé deux problèmes ici:
1er: Il ne suffit pas d'exposer un port. exposer
n'est que de la documentation, vous devez publier
(lier) un port à l'hôte pour être accessible. Voici comment procéder:
version: '3' services: mongo: image: mongo volumes: - ~/data:/data/db restart: always expose: - 6016 adminmongo: image: mrvautin/adminmongo ports: - 1234:1234 environment: - HOST=0.0.0.0
2ème: vous devez configurer adminmongo
pour écouter 0.0. 0.0
car par défaut, il commence à écouter sur 127.0.0.1
et cela le rend accessible uniquement à l'intérieur du conteneur lui-même. Sur la page de documentation que vous avez incluse dans votre question, la Configuration indique que cela peut être fait en passant une variable d'environnement:
Tous les paramètres ci-dessus sont utilisables via l'environnement, ce qui le rend très pratique lorsque vous utilisez adminMongo comme conteneur de docker! lancez simplement
docker run -e HOST = yourchoice -e PORT = 1234 ...
Puisque vous utilisez docker-compose
, ceci se fait de la manière suivante:
environment: - HOST=0.0.0.0
Exemple de travail:
ports: - 1234:1234
Ça marche ! Donc, si je comprends que faire un expose: - 1234: 1234
signifie que le docker expose le port local 1234 du conteneur à l'extérieur du conteneur afin qu'il soit accessible à localhost: 1234. Ai-je raison ? Modifier : Je comprends maintenant.
Les conteneurs «vivent» dans leur espace de noms réseau isolé. En utilisant exposer
vous informez simplement le démon docker que votre conteneur écoute sur le port 1234
. C'est juste de la documentation. Lorsque vous souhaitez lier ce port à un port hôte, vous le publiez
. J'ai écrit une réponse ici < / a> qui a plus de détails.
ajout d'environnement: - HOST = 0.0.0.0 dans docker-compose.yml résout mon problème
Exemple de travaux de composition de docker:
version: '3' services: server: container_name: docker_api_web_container image: docker_api_web build: . volumes: - ./src:/usr/src/node-app/src - ./package.json:/usr/src/node-app/package.json environment: - ENV=DEVELOPMENT - PORT=4010 ports: - '9000:4010' depends_on: - 'mongo' mongo: container_name: docker_mongo_container image: 'mongo' ports: - '27017:27017' adminmongo: container_name: docker_adminmongo_container image: mrvautin/adminmongo links: ['mongo:mongo'] environment: - HOST=0.0.0.0 ports: - '1234:1234'
Pouvez-vous expliquer en quoi votre solution fonctionne différemment?