繁体   English   中英

在 Nginx 后面运行 Docker Engine API

[英]Running Docker Engine API behind Nginx

我正在尝试在 nginx 后面运行并使用 docker 作为反向代理。 一切正常,除非"application/vnd.docker.raw-stream"使用原始流"application/vnd.docker.raw-stream"而不是正常的 HTTP 响应进行响应。 这发生在端点/start/attach等。这里记录: https : //docs.docker.com/engine/api/v1.21/#operation/ExecStart

这是我的 nginx 配置没有将 docker 响应转发给客户端的时候。 我尝试搜索它,只有一篇博客文章建议对实际 nginx C 文件进行补丁: https : //blog.yadutaf.fr/2014/12/12/how-to-run-docker-behind-an-nginx-反向代理/

我完全按照上面的博客,但是,设置r->upstream->upgrade = 1; 似乎对 docker 中的/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";
        }
    }

}

对于遇到同样问题的任何人,我在互联网上进行了广泛的研究,没有合理的方法来获得我想要与 Nginx 一起工作的内容,即使你解决了这个问题,你也会对自动缩放/负载平衡这个架构感到震惊.

今天,我使用棒表转移到 HAProxy,工作起来很有吸引力。 Nginx 不适合这个用例。

更新:愚蠢的我。 这可以与 nginx 和/或 HAProxy 一起使用,只需确保在运行 docker 命令等时将 HTTP 连接升级(降级?)到 TCP 连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM