Я как бы в моей голове с моим текущим небольшим проектом. (хотя это не должно быть так сложно)
Я пытаюсь запустить несколько веб-страниц, используя докер на моем Pi (в целях тестирования), которые должны быть доступны с использованием IP-адреса PI.
В настоящее время я запускаю minimL LIGHTTPD: (на основе образа смолы/rpi-raspbian)
docker run -d -v <testconfig>:/etc/lighttpd -p <pi-ip>:8080:80 <image name>
(этот сервер доступен через браузер на pi и на других компьютерах в сети)
Для nginx я запускаю другой контейнер с простой конфигурацией (начиная с http://nginx.org/en/docs/beginners_guide.html), содержащий веб-страницу и изображения для проверки конфигурации контейнера. этот контейнер доступен через <pi-ip>
:80
затем я попытался добавить прокси в местоположения: (поигрался, так что теперь есть 3 места для одного и того же редиректа)
location /prox1/{
proxy_pass http://<pi-ip>:8080
}
location /prox2/{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://<pi-ip>:8080
}
location /prox3/{
fastcgi_pass <pi-ip>:8080;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string
}
Версии 1 и 2 выдают ошибку 404 (я пытался добавить перезапись, но затем nginx перенаправил сам себя из-за вырезания /prox1/). Версия 3 дает тайм-аут.
Теперь я не уверен, нужно ли мне еще копать на стороне nginx, или мне нужно добавить соединение на стороне докера между контейнерами.
PS: на Pi работает ArchForArm (используя Xfce в качестве рабочего стола), потому что я не смог найти docker-compose в репозитории Raspberian.
-- РЕДАКТИРОВАТЬ ---: В настоящее время я запускаю все вручную. (поэтому нет файла для создания)
LIGHTTPD запускается командой:
docker run -d --name mylighttpd -v <testconfig>:/etc/lighttpd -p <pi-ip>:8080:80 <image name>
если я правильно понял, теперь он прослушивает в локальной сети (в диапазоне <pi-ip>
) порт 8080, который представляет собой порт 80 тестовых веб-серверов. (Я добавил ..name, чтобы его было легче остановить.)
nginx запускается так:
docker run --name mynginx --rm -p <pi-ip>:80:80 -v <config>:/data <image name>
8080 был добавлен в экспозицию в файле Docker.
В настоящее время я думаю, что неправильно понял соединение для двух клиентов на одной машине и должен добавить виртуальную сеть, сейчас я пытаюсь найти там несколько доков.
PS: я не использую уже существующий nginx-zeroconf из репозитория, потому что он говорит мне, что не может прочитать установленную версию докера. (и единственный пример использования этого с композитором также требует другого контейнера, который кажется недоступным для моей архитектуры.)
-- edit2 --: Для простого proxy_pass проблема может заключаться в URL-адресе. Я добавил более глубокую папку prox1 в папку www, содержащую индексный файл, и она отображается, когда я запрашиваю страницу.
Похоже, что <pi-ip>
:80/prox1/ перенаправляется на <pi-ip>
:8080/prox1/, но если я попытаюсь переписать его (внутри местоположения /prox1/), он сначала удалит prox1, а затем решит, что теперь он является частью исходного местоположения. . <pi-ip>
:80/
PS: я знаю, что может быть лучше разместить систему внутри другого соединения, чем через мост, и выставлять только прокси-сервер, но я пытаюсь изучить этот материал небольшими шагами.
-- edit3 --: Попытка написать сейчас, но, кажется, я столкнулся с другой частью, которую я не понимаю (почему я хотел, чтобы она работала без предварительного создания).
Я пытаюсь следовать http://docs.master.dockerproject.org/compose/compose-file/#ipv4-address-ipv6-address
networks:
backbone:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/16
gateway: 172.16.238.1
services:
nginx:
image: <nginx-image>
ports: 80:80
volumes:
- <config>:/data
depends_on:
- lighttpd
networks:
backbone:
ipv4_address: 172.16.238.2
lighttpd:
image: <lighttpd-image>
ports: 8080:80
volumes:
- <testconfig>:/etc/lighttpd
networks:
backbone:
ipv4_address: 172.16.238.3
Теперь мне нужно выяснить, почему я получаю, что IP-адрес пользователя поддерживается только при подключении к сетям с настроенными пользователем подсетями, я предполагаю, что основной блок сетей создает сеть, называемую магистралью.
-- edit4 --: Кажется, блоки ip должны быть написаны по-разному для всех доков, которые я видел, правильная форма:
...
networks:
backbone:
ipv4_address: 172.16.0.2/16
...
теперь мне нужно выяснить, как удалить часть URL-адреса, и я готов к работе.