Как лучше всего получить доступ к экземплярам докеров извне.
Я планирую развернуть несколько экземпляров докеров (node.js, php, mysql), либо все упакованные в один, либо через ссылки докеров между контейнерами.
Можно контролировать порт на хост-машине для каждого экземпляра докера, но тогда как лучше всего получить доступ к этим экземплярам извне. Я бы предпочел иметь только поддомен и избавился от перенаправленного порта экземпляра.
пример:
user@server:~/sandbox/docker-nginx$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fc7c57ed66c docker-wordpress-nginx:latest /bin/bash /start.sh 3 days ago Up 3 days 0.0.0.0:49153->80/tcp evil_poincare
Ожидаемое поведение: Запросите wordpress.domain.com доступ к wordpress внутри этого экземпляра докера через порт 49153, но браузер не перезаписывает Location с этим портом.
Я посмотрел / попробовал несколько подходов, но ни один из них не дал мне такой функциональности:
Мы будем очень благодарны за любые мысли по этой проблеме и любые рекомендации по передовой практике, возможно, я просто что-то упускаю.
Я использую для этого nginx, он работает очень хорошо (у меня). Судя по вашим комментариям, он не работает, как вы ожидаете ...
Ниже представлена упрощенная конфигурация, которая должна работать.
/etc/nginx/sites-enabled/wordpress.domain.com
server {
server_name wordpress.domain.com;
location / {
proxy_redirect off;
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_pass http://localhost:49153;
}
}
Лучшая практика - ИЗБЕГАТЬ выполнять любые задачи командной строки в контейнере Docker, лучший способ запустить и запустить контейнеры nginx точно так, как вы ожидаете, - это создать собственный образ и ДОБАВИТЬ файл конфигурации в файл Dockerfile образа.
Вы можете найти подробное описание того, как создать свой собственный образ с пользовательской конфигурацией. Вот.
Мой ответ немного запоздал: для справок в будущем вам следует взглянуть на https://github.com/jwilder/nginx-proxy. Этот инструмент автоматически генерирует соответствующую конфигурацию Nginx для пересылки входящих запросов в контейнеры Docker (на основе поддоменов).
Сначала запустите nginx-proxy:
docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
Например, если вы хотите перенаправить sub.domain.com в конкретный контейнер, просто установите VIRTUAL_HOST переменная среды контейнера на "sub.domain.com":
docker run -e VIRTUAL_HOST=sub.domain.com ...
Вот подробное руководство, которое я написал об этом: http://blog.florianlopes.io/host-multiple-websites-on-single-host-docker.
Он идеально соответствует вашему ожидаемому поведению.