Назад | Перейти на главную страницу

Доступ к экземпляру докера - передовой опыт

Как лучше всего получить доступ к экземплярам докеров извне.

Я планирую развернуть несколько экземпляров докеров (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.

Он идеально соответствует вашему ожидаемому поведению.