Docker容器中的Yesod应用程序无法发出networking请求
我有一个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
没有安装 – 所以我安装了。 现在所有的工作。
与Yesod一起使用的最终Dockerfile
,使用电子邮件authentication和Amazon SES发送电子邮件如下(“运行”命令是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"
万岁的试错:)
- 我怎样才能使用docker集装箱在EC2实例(Ubuntu 16.04)中调用我的API
- 失败(404错误)通过AWS EBS泊坞窗环境中的Nginx访问Amazon Linux API泊坞窗服务
- Amazon EFS和Docker – 创build映像时出错
- 具有Docker和EBS卷的EC2,在初始化期间在容器内安装EBS卷
- 在Elastic Beanstalk的Docker中的cron作业中访问S3
- 多Docker Elastic Beanstalk:上传.ebextensions
- 将Docker部署到AWS Elastic Beanstalk – 如何将端口转发到主机? (端口绑定)
- 如何使用jenkinsci / jnlp-slave进行复杂的构build?
- Python中的AWS Elastic Beanstalk container_commands 3.4 Docker容器