Перенаправить поддомен в Docker-контейнер, используя NGINX
У меня NGINX настроен на Centos 7.5, прослушивает порт 80 и направляет трафик на сервер Gunicorn. Это основная цель этого сервера, и это локально установленные приложения, а не контейнеры.
Теперь я хотел бы запустить некоторые сервисы в контейнерах Docker и иметь разные субдомены (или, возможно, порты), перенаправляющие трафик в соответствующие контейнеры.
Конкретный пример - SVN сервер
Я очень новичок во всей концепции Docker, и отсутствие конкретной документации для некоторых контейнеров действительно смущает меня. Мне удалось добиться определенного прогресса с этим контейнером сервера SVN. Это команда, которую я использую:docker run -d --name svn-server -p 80:80 -p 3960:3960 -v /home/svn:/home/svn elleflorio/svn-server
Это то, что я до сих пор:
- Сервер SVN доступен через http://mysite/svn (порт 80).
- Контейнер успешно связывается с локальным каталогом, сохраняя данные репозитория, даже если контейнер удален, и это здорово.
- Я могу запускать команды внутри контейнера, создавать пользователей, добавлять репозитории.
Вот эти проблемы:
- Мне пришлось остановить NGINX, так как ему также нужен порт 80.
- Пока что не удалось запустить контейнер на другом порту, это не сработало, когда я просто попытался изменить
-p
параметр; Я попытался временно отключить SELinux, который не помог. - Если бы я мог запустить контейнер на другом порту, я мог бы перенаправить трафик с субдомена на этот порт, но я уверен, что есть лучшая практика для работы с контейнерами Docker.
- Если мне удастся заставить это работать - как мне убедиться, что контейнер перезагружается после перезагрузки хоста?
1 ответ
Чтобы ваш контейнер использовал порт 8080 вместо опубликованного порта 80, используйте docker run ... -p 8080:80 ...
, Первый номер - это порт, к которому вы можете подключиться на хосте, а второй - "собственный" порт контейнера. Это соглашение {host}:{container} используется в другом месте.
Убедитесь, что вы остановили текущий контейнер (docker ps
список запущенных контейнеров), иначе у вас будет длительный контейнер, использующий порт 80.
Чтобы перезапустить контейнер при загрузке, вы можете сделать службу systemd, которая выполняет docker run ...
,