/ / Wie man ownCloud mit Docker hinter Nginx stellt? - nginx, docker, owncloud

Wie setze ich ownCloud hinter Nginx mit Docker? - nginx, docker, owncloud

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 № 1

Das 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.