【问题标题】:How to use stack image container?如何使用堆栈图像容器?
【发布时间】: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

参考文献:

更新:我正在四处寻找。当我附加到正在运行的容器时,我的应用程序肯定没有运行。如果我尝试手动执行它,我会收到以下错误:

/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


    【解决方案1】:

    我在本地构建的可执行文件 (OSX) 无法在 docker 容器上运行。解决方案是使用 docker 构建。我将 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
    

    然后我重建,现在使用 docker 映像

    stack build
    stack image container
    

    而且运行良好!看起来您需要手动指定要运行可执行文件:

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

    或者,使用--docker 运行堆栈,这将覆盖stack.yml 中的docker 设置(您也不需要运行stack build separately):

    stack --docker image container
    

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2020-11-17
      • 2018-02-04
      • 2016-03-07
      相关资源
      最近更新 更多