2015-04-10 14 views
9

Nach meinem Verständnis von docker compose/fig ist das Erstellen einer Verbindung zwischen zwei Services/Images ein Hauptgrund, wenn Sie Ports nicht anderen zur Verfügung stellen möchten.Grundlegendes zu Ports und Links in Docker compose

wie hier db aussetzt keine Ports und ist nur verbunden:

web: 
    build: . 
    links: 
    - db 
    ports: 
    - "8000:8000" 
db: 
    image: postgres 

Does web denkt db läuft auf seinem lokalen Host? Würde ich von einem Skript/Programm in web zu localhost: 5432 verbinden (Standard-Port von Postgresql), um eine Datenbankverbindung zu bekommen?

Und wenn das korrekt ist, wie können Sie Port 5432 zu 6432 ändern, ohne zu belichten? würde ich nur postgresql auf einem anderen Port ausführen?

Update:

nützliche Links nach einiger Eingabe:

http://docs.docker.com/userguide/dockerlinks/

https://docs.docker.com/compose/yml/#links

Antwort

3

web denkt db läuft auf dem Host-Variable DOCKER_DB oder etwas von der env hingewiesen so wie das. Ihre Dienste sollten auf diese Variable (Host) zeigen, nicht auf localhost.

Der Datenbankcontainer stellt Ports (über EXPOSE) seinen verknüpften Containern wieder in Variablen zur Verfügung. Sie können die db auf jedem gewünschten Port ausführen, solange sie EXPOSED ist.

9

docker-compose/fig ist hauptsächlich ein Arbeitspferd zum Starten/Verwalten mehrerer Bilder auf einmal, die irgendwie voneinander abhängig sind.

vollständig Um die Links zwischen Containern verstehen Sie sollten wissen, dass es eine Host-Eintrag ist in der Regel erstellt, innerhalb /etc/hosts-Datei, die diesen Container Hostnamen abbildet innerhalb Docker Netzwerk an eine bestimmte IP-Adresse verwaltet werden. Wenn Sie also auf postgres db zugreifen möchten, müssen Sie auf den Hostnamen db anstelle von localhost zeigen.

In Bezug auf die exponierten Ports sind bei den meisten Bildern bereits einige Ports freigelegt. Es kann also sein, dass Sie nur ein Image verwenden und dieser Port offengelegt ist. Sie können ihn jederzeit überschreiben.

-Update in Docker Compose 1.6.0+

standardmäßig Compose setzt ein einziges Netzwerk für Ihre App auf. Jeder Container für einen Service tritt dem Standardnetzwerk bei und ist sowohl für andere Container in diesem Netzwerk erreichbar als auch für sie durch einen Hostnamen identifizierbar, der mit dem Containernamen identisch ist. source

Sie können nur Verbindungen zwischen Behälter definieren, wenn Sie einen Alias ​​zu einem Container definieren möchten, etwa so:

version: '2' 
services: 
    web: 
    build: . 
    links: 
     - "db:database" 
    db: 
    image: postgres