【发布时间】:2016-07-06 15:51:16
【问题描述】:
Stack 可以使用stack image container 命令构建一个 docker 容器来在服务器上运行您的应用程序(请参阅下面的参考资料)。
如何连接到以这种方式创建的 docker 容器中的 Web 服务器?
我已经构建了一个简单的应用来演示这个问题。在此处查看完整代码:https://github.com/seanhess/haskell-docker-example
这个应用程序是从stack new 构建的,改动很小。这是 Main.hs
{-# 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
如果您在本地运行此应用程序,它会以“Hello world”响应。
stack build
stack exec haskell-docker-example
但是如果你构建 docker 镜像并启动它:
stack image container
docker run -it -p 8010:8010 haskell-docker-example
请求到达 docker 容器,但我们得到一个空响应错误,因为它后面没有任何内容。
$ curl -i http://localhost:8010
curl: (52) Empty reply from server
参考文献:
- http://www.yesodweb.com/blog/2015/12/yesod-hosting-docker-kubernetes
- https://github.com/commercialhaskell/stack/issues/2337
- http://docs.haskellstack.org/en/stable/GUIDE/#docker
更新:我正在四处寻找。当我附加到正在运行的容器时,我的应用程序肯定没有运行。如果我尝试手动执行它,我会收到以下错误:
/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 上。
【问题讨论】:
标签: haskell docker haskell-stack