Ich möchte über Nginx auf eine ownCloud-Instanz zugreifen, die beide in separaten Docker-Containern eingerichtet sind. Also habe ich gemacht docker-compose.yml
:
nginx:
image: nginx
ports:
- 80:80
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
links:
- owncloud
owncloud:
image: owncloud
ports:
- 6789:80
volumes:
- ~/ownCloud:/var/www/html/data
Und nginx.conf
Anfragen mit folgendem Inhalt weiterleiten:
http {
server {
listen 80 default;
server_name docker.dev;
location / {
proxy_pass http://127.0.0.1:6789;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
events {}
Scheint mir recht, aber Nginx meldet diese Nachricht ab
[error] 6#6: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: docker.dev
Was mache ich falsch?
Antworten:
2 für die Antwort № 1Das Problem ist, dass im Nginx-Container 127.0.0.1:6789
wird nicht zur owncloud zugeordnet. Dies liegt daran, dass Andock nur einen Port für die Zuordnung darstellt 80
auf owncloud port 6789
auf der Hostmaschine.
Stellen Sie sich vor, dass jeder Container sowie der Docker-Host eine vollständig separate Maschine ist. In diesem Fall sendet der Nginx-Rechner eine Anfrage an 127.0.0.1
Das ist nur sich selbst, nicht die Host-Maschine, nicht die owncloud-Maschine.
Es gibt viele Möglichkeiten, um zwischen Docker-Containern zu kommunizieren, und Sie verwenden bereits einen von ihnen, die eingebauten Docker-Composer Verbindungssystem.
In deinem docker-compose.yml
Sie haben owncloud bereits mit nginx verknüpft, was korrekt ist. Was dies tut, ist die Bearbeitung der Nginx-Container /etc/hosts
Zuzuordnende Datei owncloud
Die IP-Adresse des owncloud-Containers. (Sie können dies durch Ausführen überprüfen docker exec name_of_nginx_container cat /etc/hosts
). Was dies bedeutet, ist im Nginx-Container http://owncloud
Karten zum Port 80
auf dem owncloud comtainer.
In diesem Sinne ist dies eine vollständige Konfiguration, die mit dem Verlinkungssystem von Docker Compose funktioniert.
docker-compose.yml
nginx:
image: nginx
ports:
- 80:80
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
links:
- owncloud
owncloud:
image: owncloud
expose:
- 80
volumes:
- ~/ownCloud:/var/www/html/data
nginx.conf
http {
server {
listen 80 default;
server_name docker.dev;
location / {
proxy_pass http://owncloud;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
events {}
Der einzige Unterschied besteht darin, dass Sie nur Port freigeben müssen 80
auf dem owncloud-Bild nicht dem Host und dem proxy_pass
einreihen nginx.conf
.
Ich hoffe, das hilft.