docker-compose chrome-alpine для использования nginx - PullRequest
1 голос
/ 26 июня 2019

У меня есть конфигурация docker-compose, в которую я хочу встроить браузер Chrome Headless для запуска моих тестов e2e ...

nginx настроен на обратный URL-адрес прокси, скажем, foo.bar куда-то ... это прекрасно работает, если я использую свой хост-браузер, и я могу проверить его, открыв порты 444:443!

, однако, он не работает, когда я пытаюсь использовать chrome-alpine один, я перехожу к отладчику localhost:9222, выбираю экземпляр и затем набираю: http://foo.bar.

Как мне настроить alpine-chrome для использования контейнера nginx?

services:
  nginx:
    image: nginx:alpine
    command: [nginx-debug, "-g", "daemon off;"]
    volumes:
      - ../../config/nginx/nginx.config.d:/etc/nginx/conf.d/server.conf
      - ../../config/nginx/certs:/etc/nginx/certs
    ports:
      - "444:443"

  chrome:
    image: zenika/alpine-chrome:latest
    command: [chromium-browser, "--headless", "--disable-gpu", "--no-sandbox", "--remote-debugging-address=0.0.0.0", "--remote-debugging-port=9222"]
    ports:
      - "9222:9222"

Ожидается

  1. Перейдите к localhost:9222
  2. Откройте удаленный отладчик Chrome
  3. введите URL foo.bar
  4. с обратным прокси-сервером nginxfoo.bar до (например) google.com

Ответы [ 3 ]

2 голосов
/ 26 июня 2019

Жаль, что я не нашел простого решения после пробного использования, я думаю, что статическое ip-решение @Mostafa Hussein - самое простое для реализации требования.

Результат моего исследования - псевдоним foo.bar как 127.0.0.1, и пусть socat перенаправляет 127.0.0.1 сетевой трафик на mynginx, здесь socat может использовать mynginx, который не может быть используется в extra_hosts:

Итак, мое решение следующее, некрасивое, но на тот случай, если кому-то понадобится позже:

version: '3'

services:
  nginx:
    image: nginx:alpine
    container_name: mynginx
    command: [nginx-debug, "-g", "daemon off;"]
    ports:
      - "444:443"

  chrome:
    image: zenika/alpine-chrome:latest
    container_name: mychrome
    command: [chromium-browser, "--headless", "--disable-gpu", "--no-sandbox", "--remote-debugging-address=0.0.0.0", "--remote-debugging-port=9222"]
    ports:
      - "9222:9222"
    extra_hosts:
      - "foo.bar:127.0.0.1"

  helper:
    image: ubuntu:16.04
    volumes:
      - /usr/bin/docker:/usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
    tty: true
    command: bash -c "docker exec -u root -it mychrome /bin/sh -c \"apk add socat && socat TCP4-LISTEN:80,reuseaddr,fork TCP4:mynginx:80\""
    depends_on:
      - chrome

И тест:

shubuntu1@shubuntu1:~/99$ docker exec -it mychrome wget -q -O - http://foo.bar
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
2 голосов
/ 26 июня 2019

Мне удалось заставить его работать, определив статический IP для контейнера nginx, как показано ниже:

Примечание. Целью установки статического IP-адреса для nginx является предотвращение любых проблем, которые могут возникнуть из-за изменений ip.

version: "2"
services:
  nginx:
    image: nginx:alpine
    command: [nginx-debug, "-g", "daemon off;"]
    ports:
      - 80:80
    networks:
      nginx-chrome-network:
        ipv4_address: 172.28.1.1

  chrome:
    image: zenika/alpine-chrome:latest
    command: [chromium-browser, "--headless", "--disable-gpu", "--no-sandbox", "--remote-debugging-address=0.0.0.0", "--remote-debugging-port=9222"]
    ports:
      - "9222:9222"
    networks:
      - nginx-chrome-network
    extra_hosts:
      foo.bar: 172.28.1.1


networks:
  nginx-chrome-network:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16

Затем, перейдя на localhost:9222 и открыв новую вкладку, набрав foo.bar, вы получите то же, что и на следующем скриншоте:

enter image description here

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

вам нужно использовать links в вашем chrome контейнере и вызывать nginx через nginx: порт:

links:
   - nginx

или вы можете использовать сетевой драйвер host для обоих контейнеров и вызывать каждый из них по localhos: порт

network: host

конфигурация сети должна быть под каждой службой, также см. this

...