/ / Jak postawić ownCloud za Nginx z Dockerem? - Nginx, doker, własna chmura

Jak ustawić ownCloud za Nginx z Dockerem? - nginx, docker, owncloud

Chcę uzyskać dostęp do instancji ownCloud przez Nginx, oba skonfigurowane w oddzielnych kontenerach Docker. Więc zrobiłem 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

I nginx.conf do pośredniczenia żądań o następującej treści:

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 {}

Wydaje mi się to słuszne, ale Nginx wylogowuje taką wiadomość:

[error] 6#6: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: docker.dev

Co ja robię źle?

Odpowiedzi:

2 dla odpowiedzi № 1

Problem polega na tym, że wewnątrz kontenera nginx 127.0.0.1:6789 nie będzie mapowany na własną chmurę. Wynika to z faktu, że doker jest tylko portem mapowania 80 na porcie owncloud 6789 na maszynie hosta.

Wyobraź sobie, że każdy pojemnik, a host dokerów to zupełnie osobna maszyna. W takim przypadku maszyna nginx wysyła żądanie do 127.0.0.1 który jest sam w sobie, a nie maszyną hosta, a nie maszyną własnej chmury.

Istnieje wiele sposobów komunikacji między kontenerami dokerów, a ty już korzystasz z jednego z nich, wbudowanego komponowania dokerów system łączenia.

W Twoim docker-compose.yml już powiązałeś własną chmurę z nginx, co jest poprawne. To powoduje edycję kontenerów nginx /etc/hosts plik do mapy owncloud adres IP kontenera owncloud. (Możesz to sprawdzić, uruchamiając docker exec name_of_nginx_container cat /etc/hosts). Oznacza to, że wewnątrz kontenera Nginx http://owncloud mapy do portu 80 na stronie właściciela własnej chmury.

Mając to na uwadze, jest to pełna konfiguracja, która współpracuje z systemem łączenia komponentu dokera.

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 {}

Jedyne różnice polegają na tym, że wystarczy ujawnić port 80 na obrazie własnej chmury, nie mapuj go na hosta i proxy_pass wyrysować nginx.conf.

Nadzieja, która pomaga.