2017-09-10 8 views
0

Ich habe eine Webapp in Docker erstellt. Meine Webapp nutzt andere Docker Images wie Redis, Mariadb. Diese laufen alle lokal und laufen. Jetzt habe ich ein Bild von meiner Webapp erstellt. Also habe ich drei Bilder: Webapp (die nicht oben ist), Redis und Mariadb, die oben sind.Bilder miteinander kommunizieren Docker

Wenn ich versucht habe, ein Bild meiner Webapp auszuführen, kann es nicht gestartet werden. Es kann keine Verbindung mit anderen Bildern (redis und mariadb) hergestellt werden.

Wie kann ich meine Webapp Bild machen mit den anderen notwendigen Bilder

Antwort

1

Sie kommunizieren können es durch Kommunikation über Links mit dem Sie auch die Möglichkeit, sharing environmental variables between containers gibt.

https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/

Ihnen dabei helfen ich Ihnen am Beispiel von Docker-Compose-Datei zur Verfügung stellen, wo die Bilder miteinander verknüpft sind. In meinem Beispiel kommuniziert die App mit database und redis.

version: '2' 
services: 
    app: 
    extends: 
     service: app 
    volumes: 
     - .:/var/www/app 
    links: 
     - db 
     - redis 
    nginx: 
    extends: 
     service: nginx 
    links: 
     - app 
    redis: 
    extends:  
     service: redis 
    db: 
    image: postgres:9 
    volumes: 
     - db_data:/var/lib/postgres 
    restart: always 

Eine andere Möglichkeit ist Netzwerk-Befehle zu verwenden: https://docs.docker.com/engine/userguide/networking/work-with-networks/

1

Sie benötigen ein Docker Netzwerk zu schaffen zusammen alle Container zu befestigen.

docker network create net

Dann können Sie entweder die Container mit dem Netzwerk-Option starten:

docker run --network net ...

oder wenn die Behälter bereits ausgeführt werden, können Sie sie mit dem Netzwerk verbinden

docker network connect net <container-name>

Sobald Sie das tun, können die Container kommunizieren miteinander unter Verwendung des Containernamens als Hostname, Beispiel: redis, mongo ...

+0

Es funktioniert nicht. Ich habe ein Standardnetzwerk, das sowohl redis als auch mariadb verbunden hat. Jetzt, wenn ich "docker run --network default webapp" es gibt Fehler "konnte nicht mit db verbinden" :( – Abhishek

+0

@Abhishek benennen Sie den DB-Container und diesen Namen als Hostname verwenden? Auch können Sie versuchen, in exec auszuführen einem der Container und versuchen, andere Container mit dem Container-Namen pingen. – yamenk

+0

okay, Redis und Mariadb sind bereits ausgeführt, und ich habe versucht, vom Mariadb-Container neu zu ping und es kann ping.aber meine Webapp kann nicht pingen, da es nicht ausgeführt wird run "docker run --network default webapp", aber es startet nicht – Abhishek

Verwandte Themen