2016-02-01 6 views
0

Я хочу получить доступ к экземпляру экземпляра ownCloud Nginx, настроенному внутри отдельных контейнеров Docker. Так что я сделал docker-compose.yml: Как поставить ownCloud за Nginx с Docker?

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 

И nginx.conf к Proxify запросы с следующим содержанием:

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

Кажется мне правильным, но Nginx выходит из такого сообщения:

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

Что я делаю неправильно?

+0

Можете ли вы проверить, что owncloud подключен и принимает соединения независимо от Nginx (т. Е. Ударил его прямо в порт 6789)? – Eli

+0

@ Эли, да, это срабатывает, когда я нахожусь «docker.dev: 6789' – askhat

+0

Проблема может заключаться в том, что вы нажимаете 127.0.0.1 через nginx, когда вам нужно нажать docker.dev. Можете ли вы попробовать изменить строку 'proxy_pass' на' proxy_pass http: //docker.dev: 6789'? – Eli

ответ

1

Проблема в том, что внутри контейнера nginx 127.0.0.1:6789 не будет отображаться на собственном уровне. Это связано с тем, что докер выполняет только сопоставление порта 80 на собственном канале 6789 на главной машине.

Представьте, что каждый контейнер, а также хост-докер - это совершенно отдельная машина. В этом случае машина nginx отправляет запрос на 127.0.0.1, который является самим собой, а не главной машиной, а не собственной машиной.

Существует множество способов связи между контейнерами докеров, и вы уже используете один из них, docker compose, встроенный в linking system.

В вашем docker-compose.yml вы уже связали owncloud с nginx, что верно. Это делает редактирование контейнеров nginx /etc/hosts файл для наложения owncloud ip-адреса owncloud-контейнера. (Вы можете проверить это, запустив docker exec name_of_nginx_container cat /etc/hosts). Это означает, что внутри контейнера nginx http://owncloud карты отображаются в порт 80 на собственном столе.

Имея это в виду, это полная конфигурация, которая работает с системой привязки docker compose.

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

Единственное отличие заключается в том, что вам нужно только выставить порт 80 на OwnCloud изображения, не сопоставить ее с хозяином и proxy_pass линии в nginx.conf.

Надеюсь, что это поможет.