Stack kann einen Andock-Container erstellen, um Ihre App auf einem Server mit dem Befehl stack image container
auszuführen (siehe Referenzen unten).Wie wird der Stapelbildcontainer verwendet?
Wie stelle ich eine Verbindung zum Webserver im so erstellten Andock-Container her?
Ich habe eine einfache App gebaut, um das Problem zu demonstrieren. Sehen Sie den vollständigen Code hier: https://github.com/seanhess/haskell-docker-example
Diese App wurde von stack new
mit minimalen Änderungen gebaut. Hier ist 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")
Und stack.yaml
resolver: nightly-2016-06-12
image:
container:
name: haskell-docker-example
base: fpco/stack-run
Diese App antwortet mit "Hallo Welt", wenn Sie es lokal ausgeführt.
stack build
stack exec haskell-docker-example
Aber wenn Sie das Docker Bild bauen und starten Sie es:
stack image container
docker run -it -p 8010:8010 haskell-docker-example
ersucht den Docker Behälter zu erreichen, aber wir bekommen eine leere Antwort Fehler, weil es nichts dahinter steckt.
$ curl -i http://localhost:8010
curl: (52) Empty reply from server
Referenzen:
- 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
aktualisieren: Ich bin um mehr Stossen. Wenn ich den laufenden Container anhefte, wird meine App definitiv nicht ausgeführt. Wenn ich es von Hand auszuführen versuchen, erhalte ich folgende Fehlermeldung:
/usr/local/bin/haskell-docker-example-exe
bash: /usr/local/bin/haskell-docker-example-exe: cannot execute binary file: Exec format error
Einige googeln dies legt nahe kommen können, wenn sie versuchen, 64-Bit-Code auszuführen, auf einem 32-Bit-System. Ist das möglich? Wenn es darauf ankommt, bin ich auf Mac OSX.