2017-09-15 1 views
0

EDIT: Ich glaube, diese Frage ist nur relativ zu Docker, noch gebe ich die Traefik Details nur für den Fall, dass es jemand in der Zukunft hilft .Machen Sie Docker verwenden bestimmte Netzwerkschnittstelle (Name oder IP) in einem Host mit zwei Ethernet-Ports

Ich versuche Traefik in einer Maschine mit zwei Ethernet-Ports zu konfigurieren.

Da ich Port 80 nach außen verfügbar machen möchten, erhalte ich einen Fehler, wenn ich versuche, den Behälter zu starten:

ERROR: for traefik_traefik_1 Cannot start service traefik: driver failed programming external connectivity on endpoint traefik_traefik_1 (68247b1a5d9c26bfb0a139747f210140c4cf4a34d9125b2cc2fb5d968c85a89b): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use

Aber der 80-Anschluss ist nur bei der Verwendung im eth0 (ip: 192.168. 1.11) Schnittstelle.

Wie mache ich Docker (und Traefik wenn nötig) verwenden Sie die eth1 (IP: 192.168.1.12) Schnittstelle, wo der 80 Port nicht verwendet wird?

Das ist mein docker-compose.yml:

version: "2" 

services: 
    traefik: 
    image: traefik 
    networks: 
     - proxy 
    ports: 
     - 80:80 
     - 443:443 
     - 8888:8888 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
     - ${SERVER_DIR}/docker/traefik:/etc/traefik/ 
     - ${PWD}/acme.json:/acme.json 
     - ${PWD}/traefik.toml:/traefik.toml 
     - ${PWD}/servers.toml:/servers.toml 
    restart: never 

networks: 
    proxy: 
    external: true 

Und mein traefik.toml:

logLevel = "ERROR" 
defaultEntryPoints = ["http", "https"] 

[entryPoints] 
    [entryPoints.http] 
     address = "192.168.1.12:80" 
     compress = false 
     [entryPoints.http.redirect] 
      entryPoint = "https" 
    [entryPoints.https] 
     address = "192.168.1.12:443" 
     [entryPoints.https.tls] 

[acme] 
email = "[email protected]" 
storage = "acme.json" 
entryPoint = "https" 
onHostRule = true 
#onDemand = true 
[[acme.domains]] 
    main = "mydomain.net" 

[web] 
address = "192.168.1.12:8888" 

[docker] 
endpoint = "unix:///var/run/docker.sock" 
domain = "mydomain.net" 
watch = true 
exposedbydefault = false 

Und ich bin der Erstellung der proxy Netzwerk-Schnittstelle einfach mit:

Antwort

0

Binden Sie Ihre Ports zu einem bestimmten Host-IP-Adresse. Statt:

ports: 
    - 80:80 
    - 443:443 
    - 8888:8888 

Verwendung:

ports: 
    - "192.168.1.12:80:80" 
    - "192.168.1.12:443:443" 
    - "192.168.1.12:8888:8888" 

Dies ist die gleiche Syntax von dem -p Argumente docker-run verwendet. Einzelheiten finden Sie unter the documentation.

(Beachten Sie, dass die Angabe ("...") in diesem Fall nicht unbedingt erforderlich, aber YAML wird manchmal unerwartete Transformationen auf nicht börsennotierte Zahlen durchführen, damit ich standardmäßig nur die Dinge zitieren.)

+0

versuchte ich das, aber es gibt jetzt die Fehler: 'time =" 2017-09-15T14: 00: 43Z "level = error msg =" Fehler beim Erstellen des Servers: hoeren tcp 192.168.1.12:80: bind: kann die angeforderte Adresse nicht zuweisen "' – jbssm

+0

Sind Sie sicher, dass die Adresse ' 192.168.1.12' ist einer Host-Schnittstelle zugeordnet? – larsks

+0

Ja ist es. Ich habe gesehen, dass es zumindest auf Mac OS einen überragenden Bug gibt, und obwohl ich Linux benutze, bin ich gezwungen, docker Version 1.11.2 zu benutzen, also könnte das hier das Problem sein. – jbssm

Verwandte Themen