2017-09-20 13 views
1

Docker 컨테이너에서 Heroku에 배포 할 Yesod 앱이 있습니다. 앱은 Amazon SES를 사용하여 이메일을 보냅니다. yesod의 (STABLE)을 사용하여 로컬 응용 프로그램을 실행하는 경우이 잘 작동하지만 Heroku가의 용기에 나는 다음과 같은 오류 얻을 :Docker 컨테이너의 Yesod 앱이 네트워크 요청을 할 수 없습니다.

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" 
+1

나는 지금 모바일에있어 정확한 패키지 이름을 모르지만/etc/protocols을 제공하는 apt 패키지를 설치해야합니다. –

+0

고마워요, 저에게 어딘가에 찾아 볼 수 있습니다! – Will

답변

1

감사 마이클 Snoyman의 힌트에, 나는 netbase/etc/protocols를 채우는 데 필요한 패키지 것으로 나타났습니다. 설치 한 후 Amazon SES 용 SSL 인증서가 알 수없는 인증 기관에서 온 것이라고 불평하는 새로운 오류가 발생했습니다.

ca-certificates 패키지를 설치했는데이 패키지가 사라졌습니다. 나는 또한 libstdc++6이 설치되지 않았다는 오류 메시지를 보았습니다. 그래서 설치했습니다. 모두 일하고있어.

내, 이메일을 보낼 이메일 인증 아마존 SES를 사용하여, Yesod와 함께 작동 다음과 같이합니다 (이 명령은 stack build에서 컴파일 된 실행 파일은 "실행")입니다 Dockerfile 최종 : 재판

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" 

만세를하고 오류 :)