yaws 因 httpc 崩溃:请求 docker 容器提供的 URL

Posted

技术标签:

【中文标题】yaws 因 httpc 崩溃:请求 docker 容器提供的 URL【英文标题】:yaws crashes with httpc:request for URL served by docker container 【发布时间】:2021-11-30 09:08:33 【问题描述】:

我在我的 docker 堆栈中使用 yawsadminer。以前,我曾经通过nginxhttps://mydomain.tld/adm?foo=bar 路由到正确的容器

    location /adm/ 
        proxy_pass         http://adm:8080;
    

如何在yaws 中做到这一点?

想法是直接从容器adm 中获取结果。进入yaws容器并发出curl -v 'http://adm:8080'按预期工作。

我的 Erlang 代码很简单,但我遇到了一个我无法理解的错误。我首先解析adm 的URL,如果为真,则将URL 从https://mydomain.tld/adm?foo=bar 转换为http://adm:8080?foo=bar,然后调用out_adm

out_adm(Url, A) ->
    inets:start(),
    Http_result = httpc:request(Url),
    case Http_result of
        ok, _Version, 200, _ReasonPhrase, _Headers, html ->               
?trace('out_check_adm(A)======PASS_THROUGH HTML====> Url', [Url]),  
                    Html; 
        _ -> 
            not_200 
    end.

在跟踪的帮助下,我知道Http_result 可以使用Status 200。

Mod:myurl line:863 'out_adm(A)=====PASS_THROUGH HTML====> Url' ["http://adm:8080"]
=ERROR REPORT==== 11-Oct-2021::17:55:28.784448 ===
yaws code at appmod:0 crashed or ret bad val:60
Req: http_request,'GET',abs_path,"/adm",1,1

我一无所知。对我来说,一切都很清楚和容易,因此这个错误令人惊讶。问题是什么?我如何理解错误信息? Html 有问题吗?如果有,是什么?

查看https://github.com/erlyaws/yaws/blob/master/src/yaws_server.erl 中的定义对我没有帮助:

handle_out_reply(Reply, LineNo, YawsFile, _UT, ARG) ->
    L =  ?F("yaws code at ~s:~p crashed or "
            "ret bad val:~p ~nReq: ~p",
            [YawsFile, LineNo, Reply, ARG#arg.req]),
    handle_crash(ARG, L).

我该如何调试呢?这是docker还是yaws的问题?

【问题讨论】:

在阅读infoq.com/articles/vinoski-erlang-rest时发现我的错误 另见***.com/questions/69530042/… 【参考方案1】:

发现我的错误:

在我的out_adm 函数中,它必须是html, Html;,而不是简单的Html;

但现在我面临另一个问题:见HTML is not applying the CSS when viewed in browser

【讨论】:

以上是关于yaws 因 httpc 崩溃:请求 docker 容器提供的 URL的主要内容,如果未能解决你的问题,请参考以下文章

Centos docker容器因6分段故障而崩溃 - 这是核心转储

应用程序因缺少权限请求而崩溃[重复]

线程:PyQt 因“出队时队列中的未知请求”而崩溃

yaws appmods Accept-Language A 记录不正确

Golang的一个简单实用的http客户端库httpc

记一次因硬盘故障导致的docker服务无法启动