Решение найдено по адресу: https://serverfault.com/questions/880212/error-503-when-using-nginx-proxy-container-like-a-front-end-server-to-access-mul
Я хочу иметь доступ к нескольким контейнерам на одном хосте, содержащим веб-приложения.
Когда я хочу получить доступ к хосту (по его IP-адресу) или к контейнерам (например, по host_ip_adress / container1), я получаю для обоих ошибку 503 от Nginx. Я хочу получить доступ к моему контейнеру 1 по ip_addrress_host / container1.
Решение, которое я нашел в Интернете, заключалось в установке интерфейсного сервера nginx-proxy (источник: https://blog.florianlopes.io/host-multiple-websites-on-single-host-docker/)
Мой файл для создания докеров:
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock
site_a:
image: php:7.0-apache
expose:
- "80"
environment:
- VIRTUAL_HOST=192.168.12.28/container1
- VIRTUAL_PORT=80
volumes:
- ./php:/var/www/html
site_b:
image: php:7.0-apache
expose:
- "80"
environment:
- VIRTUAL_HOST=192.168.12.28/container2
- VIRTUAL_PORT=80
volumes:
- ./php:/var/www/html
Я запускаю его командой:
docker-compose up
Мои записи в файле / etc / hosts:
127.0.1.1 container1
127.0.0.1 container2
Журналы, которые я вижу, когда делаю запрос извне:
nginx-proxy_1 | nginx.1 | 192.168.12.28 192.168.12.82 - - [25/Oct/2017:09:46:42 +0000] "GET /container1 HTTP/1.1" 503 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
nginx-proxy_1 | nginx.1 | 192.168.12.28 192.168.12.82 - - [25/Oct/2017:09:46:42 +0000] "GET /favicon.ico HTTP/1.1" 503 615 "http://192.168.12.28/container1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
Спасибо за вашу помощь и извините за мой плохой английский! :-)
Изменить: я попытался поместить контейнеры nginx-proxy и контейнеры веб-приложений в одну и ту же «сеть докеров», как описано в концентраторе докеров (https://hub.docker.com/r/jwilder/nginx-proxy/), но когда я это сделаю:
docker-compose up
У меня ошибка:
ERROR: Service "site_b" uses an undefined network "proxy-nginx"
Изменить 2:
Вот мои логи для контейнера nginx-proxy в начале:
forego | starting dockergen.1 on port 5000
forego | starting nginx.1 on port 5100
dockergen.1 | 2017/10/25 14:01:53 Generated '/etc/nginx/conf.d/default.conf' from 3 containers
dockergen.1 | 2017/10/25 14:01:53 Running 'nginx -s reload'
nginx.1 | 2017/10/25 14:01:54 [warn] 30#30: server name "192.168.12.28/container1" has suspicious symbols in /etc/nginx/conf.d/default.conf:60
nginx.1 | 2017/10/25 14:01:54 [warn] 30#30: server name "192.168.12.28/container2" has suspicious symbols in /etc/nginx/conf.d/default.conf:74
dockergen.1 | 2017/10/25 14:01:54 Watching docker events
dockergen.1 | 2017/10/25 14:01:54 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification 'nginx -s reload'
Изменить 3:
Итак, теперь моя конфигурация nginx выглядит так:
server {
listen 192.168.12.28;
server_name 192.168.12.28;
access_log /var/log/nginx/host.access.log;
location / {
proxy_http_version 1.1;
proxy_pass http://172.23.0.3:80;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering Off;
proxy_cache_bypass $http_upgrade;
}
location /container1/ {
proxy_http_version 1.1;
proxy_pass http://172.23.0.3:80;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering Off;
proxy_cache_bypass $http_upgrade;
}
location /container2/ {
proxy_http_version 1.1;
proxy_pass http://172.23.0.2:80;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering Off;
proxy_cache_bypass $http_upgrade;
}
}
Когда я перехожу к http://192.168.12.28/container1
мой журнал:
site_a_1 | 172.23.0.1 - - [26/Oct/2017:09:22:40 +0000] "GET /container1/ HTTP/1.1" 404 449 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
и когда я перехожу на http://192.168.12.28/container2
мой журнал:
site_b_1 | 172.23.0.1 - - [26/Oct/2017:09:22:50 +0000] "GET /container2/ HTTP/1.1" 404 449 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
И для обоих ответ 404 not found. Кажется, он смотрит на сервер моих контейнеров по пути "/ container1" или "/ container2"? Если это правда, могу ли я заставить его присмотреть за / var / www / html /?