2017-09-20 4 views
1

J'ai une application Yesod que je déploie sur Heroku dans un conteneur Docker. L'application utilise Amazon SES pour envoyer des e-mails. Lorsque vous exécutez l'application localement yessod devel cela fonctionne très bien, mais dans le récipient sur Heroku je reçois l'erreur suivante:L'application Yesod dans le conteneur Docker ne peut pas effectuer de demandes réseau

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)) 

Je pense que je pourrais avoir besoin d'installer des paquets supplémentaires dans le conteneur. Voici le 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" 
+1

Je suis sur le mobile en ce moment et donc je ne connais pas le nom du paquet exact, mais vous devez installer le paquet apt qui fournit/etc/protocoles –

+0

Merci, cela me donne un endroit pour commencer à chercher! – Will

Répondre

1

Merci à la pointe de Michael Snoyman, je trouve que netbase est le package nécessaire pour remplir /etc/protocols. Après avoir installé cela, j'ai reçu une nouvelle erreur se plaignant que le certificat SSL pour Amazon SES provenait d'une autorité de certification inconnue.

J'ai installé le package ca-certificates, et ceci est parti. J'ai également rencontré une erreur m'indiquant que libstdc++6 n'était pas installé - ainsi j'ai installé cela. Tout fonctionne maintenant.

Ma dernière Dockerfile qui fonctionne avec Yessod, par courrier électronique auth et Amazon SES pour envoyer des emails, est la suivante (la commande « Exécuter » est l'exécutable compilé à partir 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" 

Hourra pour le procès et erreur :)