web-dev-qa-db-fra.com

comment lier un conteneur dans le menu fixe?

Voici le résultat lorsque je tape docker ps: here is the image when i type docker ps

dans docker, j'ai 3 conteneurs, webapps, redis et rabbitmq, je ne comprends pas comment lier les webapps de conteneur à conteneur redis et conteneur rabbitmq? , dans les applications non fixes, mywebapps peut envoyer un message à rabbitmq et écrire/lire reddis. Je n'ai toujours aucune idée de la façon de relier ces 3 conteneurs, j'ai essayé d'utiliser une commande comme celle-ci 

docker run --name rabbitmq -p 8080:80 --link webapps:nimmis/Apache-php7 -d rabbitmq

mais ça ne marche toujours pas

voici mon config.php sur webapps quand j'essaye d'envoyer des messages via rabbitmq

define('Host', 'localhost');
define('PORT', 5672);

j'ai essayé de changer de localhost avec hostname

define('Host', 'rabbitmq');
define('PORT', 5672);

messages d'erreur est la connexion refusée .... il semble que dans mes trois conteneurs doit configurer/mapper/lier le réseau dans la même adresse IP?

23
Kukuh Tw

La liaison est une fonctionnalité héritée . Veuillez utiliser "réseaux définis par l'utilisateur":

Sudo docker network create mynetwork

Ensuite, réexécutez vos conteneurs en utilisant ce réseau:

Sudo docker run --name rabbitmq -p 8080:80 -d --network mynetwork rabbitmq

Faites de même pour les autres conteneurs que vous souhaitez connecter les uns aux autres.

En utilisant des "réseaux définis par l'utilisateur", vous disposez d'une "résolution de nom interne" (un peu comme la résolution de nom de domaine lors de la visite de sites Web). Vous pouvez utiliser les noms du conteneur auquel vous souhaitez faire référence, afin de résoudre les adresses IP des conteneurs, tant qu'ils s'exécutent sur le même "réseau défini par l'utilisateur". Avec cela, vous pouvez résoudre l'adresse IP du conteneur rabbitmq avec son nom, au sein d'autres conteneurs, sur le même réseau. 

Tous les participants du même "réseau défini par l'utilisateur" auront une connectivité réseau. Il n'y a pas besoin de "liens hérités".

65
Farhad Farahi

Pour les dépendances et les liens entre les conteneurs, vous voudrez utiliser docker-compose où vous pouvez définir les liens links entre les conteneurs.

Dans votre répertoire racine où vous stockez vos fichiers Docker, créez un nouveau fichier appelé docker-compose.yml et définissez ici vos conteneurs en tant que services s'appuyant les uns sur les autres, comme suit:

version: '2'
services:
  webapps:
    build: .
    links:
      - "rabbitmq:rabmq"
      - "redis"

  rabbitmq:
    image: rabbitmq

  redis:
    image: redis

dans la définition du service webapps, vous voyez donc links les deux autres services rabbitmq et redis. Cela signifie que lorsque le conteneur webapps est construit, une entrée dans son fichier hosts est créée de sorte que le nom de domaine redis soit traduit en IP et le numéro de port du conteneur actuel.

Vous avez la possibilité de modifier le nom de l'adresse de ce conteneur à l'aide de la notation service:alias, comme dans le cas de la définition de rabbitmq en Utilisez l'alias rabmq à l'intérieur du conteneur webapps.

Pour maintenant construire et démarrer vos conteneurs en utilisant docker-compose, tapez simplement:

docker-compose up -d

Donc, se connecter à un autre conteneur est aussi simple que d'utiliser cet alias comme nom de l'hôte. 

Puisque vous utilisez docker-compose dans ce cas, un réseau de docker est automatiquement créé pour connecter tous les conteneurs. Vous ne devriez donc pas avoir à vous en préoccuper. Mais pour plus d'informations, consultez la documentation: https://docs.docker.com/compose/networking/#/specifying-custom-networks

11
Pitt

Vous devez lier rabbitmq et redis au conteneur de votre application Web et non l'inverse.


 #run redis container 
 docker run --name some-redis -d redis 

 #run rabbitmq container 
 docker run -d --hostname my-rabbit --name some-rabbit rabbitmq 

 Contient #run webapps 
 docker run --name webapps -p 8080: 80 --lien une-redis: redis - un peu lapin: rabbitmq nimmis/Apache-php7 

Première utilisation des conteneurs redis et rabbitmq. Ensuite, exécutez le conteneur webapps avec des liens vers les 2 conteneurs.

Maintenant, il est facile de configurer Redis Host dans les applications Web. Vous pouvez simplement utiliser la variable env 'REDIS_PORT_6379_TCP_ADDR'. Parce qu'une fois qu'un conteneur est lié, vous obtenez ses variables env. et redis exporte cette variable .

En ce qui concerne l'hôte rabbitmq - vous pouvez obtenir l'adresse IP une fois le conteneur de lapin installé:


 RABBITMQ_IP = $ (docker inspect --format '{{.NetworkSettings.IPAddress}}' un-lapin) 

puis transmettez-le dans --env lorsque vous exécutez le conteneur webapps .

3
Nesia Amit

D'après mon expérience de travail avec des déclaratives tels que docker-compose.yml, ça va, mais vous pouvez simplement utiliser 

docker run -d -P  -link  nimmis/Apache-php7  rabbitmq redis 
1
raphaeljuwe

Vous pouvez définir vos services pour utiliser un réseau défini par l'utilisateur dans votre docker-compose.yml

version: "3"

services:

  webapps:
    image: nimmis/Apache-php7
    ports:
      - "80:8080"
    networks:
      - my-network

  rabbitmq:
    image: rabbitmq
    networks:
      - my-network

  redis:
    image: redis
    networks:
      - my-network

networks:
  my-network:
    driver: overlay

Alors fais:

docker swarm init
docker stack deploy -c docker-compose.yml my-stack

Découvrez l’exemple complet à l’adresse https://docs.docker.com/get-started/part3/

0
Ahmad Abdelghany