Используйте конфигурацию ProxyPass для Apache в докере - PullRequest
2 голосов
/ 20 июня 2019

Как использовать ProxyPass в конфигурации Apache, который связан с другим контейнером? IP-адрес жесткого кодирования работает, но есть ли более общий способ сделать это?

Container1 : apache прослушивает прокси-порт 443 и передает его в порт Container2 3000

Container2 : Запускает любое приложение Flask / Dancer, которое прослушивает порт 3000

#docker-compose.yml
version: '3'
services:
  apache:
    ...
    ports:
      - "443:443"
    container_name: Container1
    network_mode: "bridge"
    depends_on: 
      - web
  web:
    ...
    container_name: Container2
    network_mode: "bridge"

-

#apache config
<VirtualHost *:443>
  ...
  ProxyPreserveHost on
    # Works but with ip 
    #ProxyPass / http://ip-of-container2:3000/
    #ProxyPassReverse / http://ip-of-container2:3000/
  ProxyPass / http://Container2:3000/
  ProxyPassReverse / http://Container2:3000/
</VirtualHost>

1 Ответ

1 голос
/ 20 июня 2019

Итак, network_mode - это проблема.

Я удаляю network_mode и у меня есть тест на следующее:

version: '3'
services:
  apache:
    image: ubuntu
    container_name: Container1
    #network_mode: "bridge"
    tty: true
  web:
    image: ubuntu
    container_name: Container2
    #network_mode: "bridge"
    tty: true

После docker-compose up -d я вхожу в Container1и установить ping, я могу пропинговать Container2.

root@fe69bd6d62af:/# ping Container2
PING Container2 (172.26.0.3) 56(84) bytes of data.
64 bytes from Container2.bb_default (172.26.0.3): icmp_seq=1 ttl=64 time=0.166 ms
64 bytes from Container2.bb_default (172.26.0.3): icmp_seq=2 ttl=64 time=0.064 ms

Вы также можете обратиться к official doc , чтобы узнать, какие пользовательские мосты приносят нам, сравнить с мостом по умолчанию,основное отличие заключается в следующем:

Пользовательские мосты обеспечивают автоматическое разрешение DNS между контейнерами.

Если вы не укажете network_mode, compose автоматически настроит пользователя-определенные мосты для вас, так что вы можете использовать эту магию.В моем примере bb_default - это настройка моста для нас, вы можете использовать docker network ls, чтобы подтвердить это.Кроме того, можно использовать docker network inspect bb_default, чтобы увидеть детали этого нового моста.

...