2017-07-27 3 views
1

Ich habe folgendes Setup in Docker:Anmeldung nicht aus (fluentd) logdriver in Servicenamen compose

  • Applikation (httpd)
  • Fluentd
  • Elasticsearch
  • Kibana

Die Konfiguration des Protokolltreibers der Anwendung beschreibt den Fluentd-Container. Die Protokolle werden in ES gespeichert und in Kibana angezeigt.

Wenn die logdriver wie diese konfiguriert ist, funktioniert es:

web: 
    image: httpd 
    container_name: httpd 
    ports: 
     - "80:80" 
    links: 
     - fluentd 
    logging: 
     driver: "fluentd" 
     options: 
     fluentd-address: localhost:24224 
     tag: httpd.access 

Und fluentd ist die Abbildung seiner exponierten Port 24224 auf Port 24224 des Wirtes.

fluentd: 
    build: ./fluentd 
    image: fluentd 
    container_name: fluentd 
    links: 
     - "elasticsearch" 
    ports: 
     - "24224:24224" 

Aber ich möchte nicht meine fließend auf dem Hostnetwork aussetzen. Ich will es halten ‚privat‘ im Innern des Docker Netzwerkes (Ich will nur die App und Kibana auf dem Host-Netzwerk zur Karte), so wie folgt aus:

fluentd: 
    build: ./fluentd 
    image: fluentd 
    container_name: fluentd 
    links: 
    - "elasticsearch" 

Die Port 24224 (im dockerfile) nach wie vor ausgesetzt ist, aber Es ist nicht auf das Host-Netzwerk abgebildet. Jetzt möchte ich die Config des logdriver meiner App ändern: Protokollierung: Fahrer: "fluentd" Optionen: fluentd-Adresse: fluentd: 24224 tag: httpd.access

So fluentd ist der Name der fluentd container und sie befinden sich im selben Netzwerk, aber die App kann keine Verbindung herstellen.

failed to initialize logging driver: dial tcp: lookup fluentd 

Ist dies möglicherweise, weil die Protokollierungsoption vor der 'Link'-Option in der Compose-Datei ausgeführt wird?

Gibt es eine Möglichkeit, dies funktionieren zu lassen?

Antwort

1

Dies ist derzeit nicht möglich. Der Docker-Deamon, der die Protokolltreiber behandelt, ist ein Prozess, der auf dem Hostcomputer ausgeführt wird. Es ist kein Dienst in Ihrem Netzwerk und kann daher Service-Namen nicht in IPs auflösen. Siehe hierzu github issue für detailliertere Erklärungen.

Sie müssen einen Port veröffentlichen, damit dies funktioniert.

+0

Okay, gut zu wissen. Vielen Dank. – lvthillo