Запуск Docker Engine API за Nginx

Я пытаюсь запустить и использовать докер за nginx в качестве обратного прокси. Все работает нормально, кроме случаев, когда докер отвечает необработанным потоком "application/vnd.docker.raw-stream" вместо обычного HTTP-ответа. Это происходит с конечными точками /start, /attach и т. Д., Описанными здесь: https://docs.docker.com/engine/api/v1.21/#operation/ExecStart

Это когда моя конфигурация nginx не пересылает клиенту ответ докера. Я попытался найти его, и есть только одна статья в блоге, предлагающая патч для реального файла nginx C: https://blog.yadutaf.fr/2014/12/12/how-to-run-docker-behind-an-nginx-reverse-proxy/

Я полностью следил за приведенным выше блогом, однако установка r->upstream->upgrade = 1;, похоже, не влияет на конечную точку /start HTTP в докере. Nginx просто не отвечает. Есть ли способ обойти это? На данный момент это мой файл nginx.conf:

daemon off;
error_log /dev/stdout info;
# error_log logs/error.log debug;

events {
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                               '$status $body_bytes_sent "$http_referer" '
                               '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /dev/stdout main;
    # include       mime.types;
    # default_type  application/octet-stream;
    # sendfile        on;
    # keepalive_timeout  65;

    upstream dockerpool {
        # session_sticky cookie=sessionid fallback=off mode=insert option=indirect;
        # backup server
        # server nginx_dev_test:80;
        server socat:2376;
    }

    server {
        listen 80;

        location / {
            # The upstream here must be a nginx variable
            set $ups dockerpool;
            proxy_buffering off;
            proxy_pass http://$ups;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        }
    }

}

person mehulmpt    schedule 13.02.2020    source источник
comment
Любой, кто может получить доступ к Docker API, может в значительной степени тривиально рутировать систему. Почему вы хотите опубликовать его через экземпляр nginx?   -  person David Maze    schedule 13.02.2020
comment
У меня есть индивидуальная потребность в программном обеспечении, не беспокойтесь о части безопасности, все происходит в контролируемой среде. Помогите мне с технической частью, если можно @DavidMaze   -  person mehulmpt    schedule 13.02.2020


Ответы (1)


Для тех, кто борется с той же проблемой, я провел обширное исследование в Интернете, и нет разумного метода, чтобы получить то, что я хотел бы работать с Nginx, и даже если вы решите это, вы взорвете голову от автомасштабирования / балансировки нагрузки этой архитектуры. .

Сегодня я перешел на HAProxy, используя столы для стикеров, работает как шарм. Nginx не подходит для этого варианта использования.

Обновление: ГЛУПОЙ МЕНЯ. Это МОЖЕТ работать с nginx и / или HAProxy, просто убедитесь, что вы обновили (понизили?) Свое HTTP-соединение до TCP-соединения при выполнении команд докеров и т. Д.

person mehulmpt    schedule 13.02.2020