2017-05-19 2 views
2

Ich verwende Postgres und Keycloak Bilder auf meinem lokalen Rechner. Beide Bilder haben offengelegte Ports konfiguriert. Aber die Docker-Maschine zeigt nur Ports über TCP an. So konnte ich über TCP eine Verbindung zu den postgres herstellen, konnte aber keine Verbindung zum localhost: 8080 von keycloack über HTTP herstellen.Ist es möglich, HTTP-Ports mit docker-compose offenzulegen?

So ist es möglich, mit dem Docker offengelegten Ports über HTTP zu verbinden.

Andockfensters-compose.yml

postgres: 
image: postgres:9.6.3 
volumes: 
    - ./db/init:/docker-entrypoint-initdb.d 
environment: 
    - POSTGRES_USER=root 
    - POSTGRES_PASSWORD=root 
ports: 
    - 5432:5432 

keycloak: 
image: jboss/keycloak-postgres 
environment: 
    - KEYCLOAK_LOGLEVEL=DEBUG 
    - POSTGRES_DATABASE=user-service 
    - POSTGRES_USER=root 
    - POSTGRES_PASSWORD=root 
links: 
    - postgres:postgres 
ports: 
    - "8080:8080" 
    - "9999:9990" 
    - "443:8443" 
volumes: 
    - ./data:/data 

docker ps

Antwort

1

Es scheint, dass Port aussetzt etwa über http an die Docker Maschine anschließen: // {Docker-Maschine-ip}: {port} und in der Lage sein, um es mit localhost eine Notwendigkeit, um eine Verbindung zu konfigurieren Ports weiterzuleiten innerhalb der virtuellen Maschine.

Local virtual machine ports forwarding

Nach dieser Konfiguration konnte ich alle meine Laufbehälter mit http verbinden: // localhost: {port}

1

HTTP ist ein Protokoll, das auf TCP reitet, so dass, wenn Docker legt einen Port über TCP (im Gegensatz zu UDP, die andere Option) Dann können Sie über HTTP, , eine Verbindung zu diesem Port herstellen, vorausgesetzt, HTTP spricht auf diesem Port innerhalb des Containers.

Also, wenn Sie nicht zu http://localhost:8080 mit der oben compose Datei verbinden können, das wahrscheinlich bedeutet, dass der keycloak Service entweder nichts hat, auf Port 8080 im Innern des Behälters zu hören, oder was auch immer zuhören spricht nicht HTTP, oder was auch immer hört und spricht HTTP lehnt die Verbindung aus einem anderen Grund ab.

Um vollständig auszuschließen, dass das Problem mit dem Port Mapping oder etwas auf dem Host ist, hüpfen Sie in den Container (mit docker exec) und versuchen, von innen auf 8080 zu verbinden; Wenn Sie das nicht können, dann haben Sie bestätigt, dass das Problem mit dem, was innerhalb des Containers läuft, und nicht mit irgendetwas, das mit Docker zusammenhängt, verbunden ist.

+0

Danke für Antwort. Ich konnte mich vom Inneren des Containers aus mit dem 8080 verbinden. Auch ich bin in der Lage, eine Verbindung zu ihm mit Docker Maschine IP, d. H. 192.168.99.100:8080, aber nicht localhost: 8080 ... Also ich denke, das Problem ist in den Ports exposing/Redirect. –