Ich habe ein paar Probleme mit Docker und cURL.Docker: Curl Fehler beim Versuch, App in demselben Container zu kontaktieren
Ich habe ein Docker-compose Behälter wie folgt festgelegt:
app:
image: busybox
volumes:
- /home/ben/dev/dummy/www/:/data/www/
- /home/ben/dev/dummy/logs/:/data/logapache/
- /home/ben/dev/dummy/flux-entrants/:/data/flux-entrants/
nginx:
image: docker.dummy.fr/nginx
volumes_from:
- app
ports:
- 80:80
links:
- php
php:
image: docker.dummy.fr/actus-php
volumes_from:
- app
ports:
- 9000:9000
links:
- db
- nosql
db:
image: docker.dummy.fr/mysql-5.6
environment:
MYSQL_ROOT_PASSWORD: root
nosql:
image: docker.dummy.fr/lp-nosql
ports:
- "9200:9200"
Es gibt auch extra_hosts Richtlinie, die ich hier aus Gründen der Vertraulichkeit entfernt haben, aber die Gastgeber in nginx auch konfiguriert sind (abgebildet auf Port 80 von natürlich) und in den Containern/etc/hosts
Also sind die nginx, php, mysql und elasticsearch alle in separaten Containern. Der Nginx-Container ist mit dem PHP-Container verbunden, der mit den anderen beiden verknüpft ist. Das funktioniert ganz gut, und vor allem kein Problem.
Innerhalb dieses Behälters Ich betreiben zwei Web-Anwendungen, wie mit den zusätzlichen Hosts gesehen: eine Frontend-Client (Symfony 2.8) und eine Backend API (auch Symfony 2.8).
Jetzt zum Problem.
Wenn ich versuche, den API App von außerhalb des php Container, in der Regel Postman oder cURL cli von meinem Terminal auf meinem Linux oder cURL vom nginx Behälter, kein Problem zu kontaktieren.
Aber wenn die Front App (im selben Container) versucht, die API App oder zu kontaktieren, wenn ich aus dem Inneren des php Behälter zu locken versuchen, erhalte ich cURL Fehler "Verbindung abgelehnt". Der ausführliche Modus zeigt, dass der Header nicht einmal gesendet wird.
Ich dachte, es wäre ein Port-Mapping-Problem, aber das Ändern der Ports, das Öffnen neuer Ports und der Versuch, eine Verbindung über diese Ports herzustellen, funktioniert auch nicht.
Ich versuchte es über Port 9000 zu kontaktieren (verwendet für Nginx Upstream und im Docker-Compose geöffnet), aber dann bekomme ich einen anderen Fehler: "Recv Fehler: Verbindung durch Peer zurückgesetzt". Der ausführliche Modus zeigt an, dass Header und Request ordnungsgemäß gesendet werden. Dann trennt der Server die Verbindung.
Hat schon jemand dieses Problem? Wenn ja, wie haben Sie es gelöst? Ich habe hier gesucht, konnte aber nicht das gleiche Problem finden.
Vielen Dank.
EDIT:
ich versuchte, nur zwei getrennte Sätze von Behältern zu machen (ein PHP Container + ein Nginx Behälter) für jede Anwendung (vorne und API), in einem eigenen Behältern separat jede Anwendung der Montage und I hat immer noch das gleiche Problem. Ich kann es einfach nicht verstehen.
Nicht klar, aus welchem Container Sie versuchen, welche Verbindung über cURL herzustellen? Was ist API für Sie? Bitte fügen Sie auch die Ausgabe von docker ps an laufende Container an. – aholbreich
Ich habe vier Container, darunter einen ausschließlich für PHP (namens php im Docker-Compose). In diesem Container leben zwei verschiedene Symfony-Apps: eine Front-Client-App und eine Back-/API-App. Wenn ich die API-App von meinem Terminal, von Postman oder was auch immer außerhalb des PHP-Containers cURL, funktioniert alles. Wenn der Front versucht, die API aufzurufen, oder wenn ich versuche, die API aus dem PHP-Container heraus zu cURL, funktioniert es nicht. – Tiriel
könnten Sie Ihren cURL-Befehl und die Ausgabe von "docker ps" bereitstellen – aholbreich