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?