Как запустить и получить доступ к другому веб-серверу под Windows 2 по другому URL-адресу с помощью Docker? - PullRequest
0 голосов
/ 08 ноября 2018

Я установил Docker для Windows и мог запустить веб-сервер (nginx).Я использую версию Docker: 18.06.1-ce-win73 (19507) и версию Windows: 10.0.16299 Enterprise.

На данный момент я могу получить доступ в браузере хост-ОС (windows) в разделе "http://localhost/" веб-сервер.

Я хотел бы сделать следующее:

Запустить 2 веб-сервера (webA [nginx] и webB [apache]), используя docker, и получить к ним доступ через хостбраузер. Я хотел бы иметь, например, "http://webA" для доступа к webA и" http://webB" для доступа к webB.

Я пытался присвоить контейнеру разные IP-адреса и использовал файл хоста, ноэто не сработало. Как я читал под: https://docs.docker.com/docker-for-windows/networking/#i-cannot-ping-my-containers Невозможно привязать, невозможно привязать IP к контейнеру под Windows.

Теперь я пытаюсь использовать докер вVMWare, где я запускаю Linux, но imho кажется, что этот подход немного тяжел.

Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Запустите 2 веб-сервера (webA [nginx] и webB [apache]) с помощью Docker и получите доступ к ним через браузер хоста. Я хотел бы, например, «http://webA" для доступа к webA и« http://webB" для доступа к webB.

Чтобы все сайты работали на одном порту, есть возможность использовать один веб-сервис в качестве прокси. Вот пример для docker-compose файла:

version: '3'
services:
  nginx_siteA: 
    image: nginx:latest
    container_name: nginx_siteA
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
# all other stuff 
...

  apache_siteB:
    image: httpd:latest
    container_name: httpd_siteB
# all other stuff 
...

Итак, в этом примере 2 веб-службы настроены и могут связываться друг с другом из сети Docker (вы можете пропинговать и / или прокручивать apache из nginx и наоборот). Но с хоста машины - вы можете связаться только с nginx, используя 80 порт. Постскриптум nginx_siteA и apache_siteB являются именами служб, и их можно использовать в конфигурационных файлах в качестве имен доменов (имен хостов)

И настройте nginx для работы непосредственно с siteA и прокси SiteB, например:

server {
    server_name siteA;
    # all other stuff   
    ......
}
server {
    server_name siteB;
    location /{
      proxy_pass http://apache_siteB;
    }
# all other stuff 
....
}

Или используйте контейнер Apache таким же образом: установить mod_proxy и в файле Apache domain.conf добавить в VirtualHost блочную директиву: ProxyPass / http://nginx_siteA/

0 голосов
/ 09 ноября 2018

Для двух служб необходимо использовать два разных порта.

Вы запускаете свой контейнер nginx как

docker run --name some-nginx -d -p 80:80 some-content-nginx

А затем запустить Apache, как

docker run -dit --name my-apache -p 8080:80 my-apache2

В результате вы получаете nginx на http://localhost:80 и apache на http://localhost:8080.

Если вы хотите иметь http://webA.yourdomain.com,, вам придется либо сконфигурировать vhost на вашем хосте, либо использовать прокси, такой как traefik.

...