Перенаправить поддомен в Docker-контейнер, используя NGINX

491
Shovalt

Я настроил 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
Не уверен насчет Docker, но заголовок вопроса требует обычной конфигурации Nginx с «обратным прокси». grawity 6 лет назад 0
@ Grawity, я не очень хорошо говорю на жаргоне. Я немного знаком с этой фразой, но не был уверен, что она уместна здесь. Shovalt 6 лет назад 0

1 ответ на вопрос

0
xenoid

Чтобы ваш контейнер использовал порт 8080 вместо опубликованного порта 80, используйте docker run ... -p 8080:80 .... Первый номер - это порт, к которому вы можете подключиться на хосте, а второй - «собственный» порт контейнера. Это соглашение : используется в другом месте.

Убедитесь, что вы остановили текущий контейнер ( docker psдля просмотра списка запущенных контейнеров), иначе у вас будет длительный контейнер, использующий порт 80.

Чтобы перезапустить контейнер при загрузке, вы можете сделать службу systemd, которая выполняет docker run ....

Не могли бы вы объяснить аннотацию `-p [порт1]: [порт2]`? Первый относится к хосту, а второй к контейнеру? Shovalt 6 лет назад 0
Да, первый номер - это порт, к которому вы можете подключиться на хосте, а второй - «собственный» порт контейнера. Это соглашение `: ` используется в другом месте (тома ...). xenoid 6 лет назад 0
Спасибо @xenoid, это работает. Я добавил ваш комментарий к самому ответу. Shovalt 6 лет назад 0

Похожие вопросы