haskell - Docker容器中的Yesod应用程序无法发出网络请求

标签 haskell docker yesod amazon-ses

我有一个 Yesod 应用程序,正在将其部署到 Docker 容器中的 Heroku。该应用程序使用 Amazon SES 发送电子邮件。当使用 yesod devel 在本地运行应用程序时,效果很好,但在 Heroku 上的容器中,我收到以下错误:

HttpExceptionRequest Request {
  host                 = "email.eu-west-1.amazonaws.com"
  port                 = 443
  secure               = True
  requestHeaders       = [("Content-Type","application/x-www-form-
urlencoded"),("Date","Wed, 20 Sep 2017 12:39:49 +0000"),("X-Amzn-
Authorization","AWS3-HTTPS AWSAccessKeyId=AKIAIBUN4ZEOKYKOB35A, 
Algorithm=HmacSHA256, 
Signature=xh3fi4EJOAe0LOZVCng5NRZIw2D+6P++0aO4Q5Dy0gw=")]
  path                 = "/"
  queryString          = ""
  method               = "POST"
  proxy                = Nothing
  rawBody              = False
  redirectCount        = 10
  responseTimeout      = ResponseTimeoutDefault
  requestVersion       = HTTP/1.1
}
 (ConnectionFailure Network.BSD.getProtocolByName: does not exist (no 
such protocol name: tcp))

我想我可能需要在容器中安装一些额外的软件包。这是 Dockerfile:

FROM ubuntu:17.04

RUN apt-get update && apt-get install -y libpq-dev

WORKDIR /app

ADD . /app

EXPOSE 8080

ENV PGHOST localhost

CMD "./run"

最佳答案

感谢 Michael Snoyman 的提示,我发现 netbase 是填充 /etc/protocols 所需的包。安装后,我收到一个新错误,提示 Amazon SES 的 SSL 证书来自未知的证书颁发机构。

我安装了ca-certificates包,然后这个问题就消失了。我还遇到一个错误,告诉我没有安装 libstdc++6 - 所以我安装了它。现在一切正常。

我的最终 Dockerfile 与 Yesod 配合使用,使用电子邮件身份验证和 Amazon SES 发送电子邮件,如下所示(“run”命令是从 stack build 编译的可执行文件>):

FROM ubuntu:17.04

RUN apt-get update && apt-get install -y libpq-dev libgnutls30 netbase libstdc++6 ca-certificates

WORKDIR /app

ADD . /app

EXPOSE 8080

ENV PGHOST localhost

CMD "./run"

尝试和错误万岁:)

关于haskell - Docker容器中的Yesod应用程序无法发出网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46322773/

相关文章:

rest - 如何在 Haskell 中实现 HATEOAS?

haskell - makeApplication函数内部如何查询数据库

haskell - 在 Haskell 中合并/追加 Justs

haskell - Haskell 中 id 函数的类型

haskell - fmap 如何与数据构造函数一起使用?

docker - 在 ubuntu 16.04 上安装 php7.4 - Dockerfile

haskell - 多态编码的递归代数数据类型的值是什么?

scala - 如何为 sbt 原生打包器的 DockerPlugin 设置基础镜像?

linux - 提取 Docker.io 镜像的根文件系统并在 chroot 中使用它是否安全?

json - Yesod Mongo DB 和 JSON