2016-07-06 1 views
3

스택은 stack image container 명령을 사용하여 서버에서 앱을 실행하기위한 도커 컨테이너를 만들 수 있습니다 (아래 참고 자료 참조).스택 이미지 컨테이너를 사용하는 방법은 무엇입니까?

이렇게 만든 도커 컨테이너에서 웹 서버에 어떻게 연결합니까?

문제를 설명하기 위해 간단한 앱을 만들었습니다. 전체 코드는 여기에서 확인하십시오 : https://github.com/seanhess/haskell-docker-example

이 응용 프로그램은 최소한의 변경으로 stack new에서 작성되었습니다. 여기

{-# LANGUAGE OverloadedStrings #-} 
module Main where 

import Network.Wai 
import Network.HTTP.Types (status200) 
import qualified Network.Wai.Handler.Warp as Warp 

main :: IO() 
main = Warp.run 8010 app 

app :: Application 
app req respond = do 
    (putStrLn $ "Request: " ++ (show req)) 
    (respond $ responseLBS status200 [] "Hello World") 

그리고 stack.yaml

resolver: nightly-2016-06-12 

image: 
    container: 
    name: haskell-docker-example 
    base: fpco/stack-run 

이 응용 프로그램은 응답을 Main.hs

의에 "Hello World"로컬로 실행합니다.

stack build 
stack exec haskell-docker-example 

하지만 당신은 고정 표시기 이미지를 구축하고 시작하는 경우 :

stack image container 
docker run -it -p 8010:8010 haskell-docker-example 

요청이 고정 표시기 컨테이너에 도달하지만, 그 뒤에 아무것도 없기 때문에 우리가 빈 응답 오류가 발생합니다.

$ curl -i http://localhost:8010 
curl: (52) Empty reply from server 

참고 :

업데이트 : 나는 주위를 더 파고 있어요. 실행중인 컨테이너에 연결할 때 내 앱이 실행되고 있지 않습니다. 내가 손으로 그것을 실행하려고하면 나는 다음과 같은 오류가 발생합니다 :

/usr/local/bin/haskell-docker-example-exe 
bash: /usr/local/bin/haskell-docker-example-exe: cannot execute binary file: Exec format error 

일부 인터넷 검색이 32 비트 시스템에서 64 비트 코드를 실행하려고 할 때이 올 수 있습니다 제안합니다. 그게 가능하니? 중요한 일이라면 나는 mac osx에있다.

답변

5

로컬에서 작성한 실행 파일 (OSX)이 도커 컨테이너에서 실행 가능하지 않았습니다. 해결책은 도커로 제작하는 것이 었습니다. 나는 다음에 stack.yaml 변경 :

# we have to switch to an LTS resolver, because the stack-build 
# docker image doesn't support nightly. 
resolver: lts-6.6 

docker: 
    enable: true 

image: 
    container: 
    name: haskell-docker-example 
    base: fpco/stack-run 

가 그럼 난 다시, 지금은 고정 표시기 이미지

stack build 
stack image container 

그리고 그것은 큰 실행을 사용! 또한 stack build separately를 실행할 필요가 없습니다 (stack.yml에 고정 표시기 설정을 무시합니다 --docker

docker run -it -p 8010:8010 haskell-docker-example /usr/local/bin/haskell-docker-example-exe 

또는 실행 스택 : 당신이 수동으로하지만 실행 파일을 실행하도록 지정해야 할 것 같은데) :

stack --docker image container 
관련 문제