2017-10-18 2 views
0

Ich habe zwei Docker Container (Linux-Container auf Windows 10-Host), die aus dem Microsoft/Aspnetcore-Basis-Image erstellt werden. Beide Container laufen gut, wenn ich sie einzeln starte. Ich versuche, mit Docker Compose beide Container hochzufahren (einer ist ein Identity-Provider, der IdentityServer4 verwendet und der andere ist eine API-Ressource, die von Identity Server geschützt wird). Ich habe folgende Docker-compose.yml Datei:Http Kommunikation zwischen 2 Docker Container mit Docker Compose

version: '3' 

services: 
    identityserver: 
    image: eventloom/identityserver 
    build: 
     context: ../Eventloom.Web.IdentityProvider/Eventloom.Web.IdentityProvider 
     dockerfile: DockerFile  
    ports: 
     - 8888:80 
    eventsite: 
    image: eventloom/eventsite 
    build: 
     context: ./Eventloom.Web.Eventsite 
     dockerfile: Dockerfile 
    ports: 
     - 8080:80 
    links: 
     - identityserver 
    depends_on: 
     - identityserver 
    environment: 
     IdentityServer: "http://identityserver" 

die Startklasse für die "eventsite" Container verwendet IdentityModel den Ermittlungs-Endpunkt von "identityserver" ping. Aus irgendeinem Grund kann der Startvorgang die Ermittlungsinformationen nie erfolgreich abrufen, obwohl ich mich am Ereignisspeichercontainer anmelden und Ping-Antworten vom Identitätsserver abrufen kann. Gibt es noch etwas, das ich tun muss, damit Ereignissite über Port 80 mit Identityserver kommunizieren kann?

+0

Können Sie Fehlerprotokolle eingeben? –

+1

Ich kann sehen, dass Sie in der Docker-Compose-Datei depends_on und Links verwenden. Sie müssen nur einen von ihnen verwenden (sie machen das gleiche). Stellen Sie sicher, dass Sie den Dienstnamen in Ihren Konfigurationsdateien verwenden, damit die verschiedenen Container miteinander kommunizieren. – sys0dm1n

+1

Verwenden Sie keine Links (sie sind veraltet). Wenn Sie eine moderne Version von docker-compose verwenden, werden die Container standardmäßig automatisch miteinander vernetzt. Beispielsweise können Sie auf den Identitätsserver innerhalb des Ereigniscontainers auf den Hostnamen "identityserver" zugreifen. Ändern Sie den Dienstnamen in den gewünschten Hostnamen. – mkasberg

Antwort

0

Es stellt sich heraus, dass die HTTP-Kommunikation ordnungsgemäß funktionierte und den internen DNS ordnungsgemäß verwendete. Das Problem trat bei meinem IdentityModel.DiscoveryClient-Objekt auf, und es wurde nicht so konfiguriert, dass nur HTTP zulässig war. Ich musste VS verwenden, um zu debuggen, als die App in dem Container gestartet wurde, um es herauszufinden. Vielen Dank.

Verwandte Themen