【发布时间】:2018-04-23 11:11:43
【问题描述】:
作为我尝试使miso-isomorphic-stack 尽可能流畅的体验的一部分,我制作了几个带有 GHCJS 的 docker 映像和一些更新的堆栈版本(repo here 和 hub here),基于 @987654324 @。您可以在 repo 中查看如何使用它们,也许 this script 可以了解如何将其更好地集成到您的流程中。
因此,理想情况下,您可以让堆栈管理 docker 映像,方法是:
resolver: lts-9.21
compiler: ghcjs-0.2.1.9009021_ghc-8.0.2
compiler-check: match-exact
setup-info:
ghcjs:
source:
ghcjs-0.2.1.9009021_ghc-8.0.2:
url: https://github.com/matchwood/ghcjs-stack-dist/raw/master/ghcjs-0.2.1.9009021.tar.gz
sha1: b1740c3c99e5039ac306702894cd6e58283f4d31
docker:
enable: true
repo: "tehnix/ghcjs-docker" # It will automatically add :lts-x.xx
auto-pull: true
system-ghc: false
不幸的是,stack 将开始在主机系统上寻找 GHCJS,因此不会发现 GHCJS 已经构建在它使用的容器镜像中。我怀疑这与 setup-info 有关,但我并不完全清楚如何解决此问题。
我希望这里的人可能会更多地了解堆栈发生了什么,以及编译器是如何处理的。
图像本身相当简单,它们只是在其中安装 GHCJS,这意味着您不必花费数小时自己构建 GHCJS,遇到任何问题,并且可以快速开始尝试 GHCJS。
更新
尝试使用@mgsloan 的建议失败并出现以下问题,
No information found for ghcjs-0.2.1.9009021_ghc-8.0.2.
Supported versions for OS key 'source': GhcjsVersion 0.1.0.20150924 7.10.2
带有stack -v build的完整构建日志:
Version 1.6.3, Git revision b27e629b8c4ce369e3b8273f04db193b060000db (5454 commits) x86_64 hpack-0.20.0
2018-04-24 12:56:42.195877: [debug] Loading project config file frontend/stack.yaml
@(Stack/Config.hs:868:13)
2018-04-24 12:56:42.205781: [debug] Run process: /usr/local/bin/docker --version
@(System/Process/Log.hs:37:3)
2018-04-24 12:56:42.559527: [debug] Process finished in 353ms: /usr/local/bin/docker --version
@(System/Process/Log.hs:44:3)
2018-04-24 12:56:42.559917: [debug] Run process: /usr/local/bin/docker inspect tehnix/ghcjs-docker:lts-9.21
@(System/Process/Log.hs:37:3)
2018-04-24 12:56:42.643497: [debug] Process finished in 83ms: /usr/local/bin/docker inspect tehnix/ghcjs-docker:lts-9.21
@(System/Process/Log.hs:44:3)
2018-04-24 12:56:42.657949: [debug] Run process: /usr/local/bin/docker create --net=host -e STACK_IN_CONTAINER=1 -e STACK_ROOT=/Users/christiankjaerlaustsen/.stack -e STACK_PLATFORM_VARIANT=dkb61b2dc4e76119fbba7cceb60d5ffa49 -e HOME=/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home -e PATH=/opt/host/bin:/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home/.local/bin:/root/.cabal/bin:/root/.local/bin:/opt/ghc/8.2.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -e PWD=/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack -v /Users/christiankjaerlaustsen:/Users/christiankjaerlaustsen -v /Users/christiankjaerlaustsen/.stack:/Users/christiankjaerlaustsen/.stack -v /Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend:/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend -v /Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home:/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home -w /Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack -e USER=christiankjaerlaustsen -e SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.D8v3WjTyAg/Listeners -v /private/tmp/com.apple.launchd.D8v3WjTyAg/Listeners:/private/tmp/com.apple.launchd.D8v3WjTyAg/Listeners -v /Users/christiankjaerlaustsen/.stack/programs/x86_64-linux/stack-1.6.3/stack:/opt/host/bin/stack -t -i tehnix/ghcjs-docker:lts-9.21 /opt/host/bin/stack --internal-re-exec-version=1.6.3 --internal-docker-entrypoint "DockerEntrypoint {deUser = Just (DockerUser {duUid = 501, duGid = 20, duGroups = [20,12,61,79,80,81,98,702,33,100,204,250,395,398,399,701], duUmask = 18})}" --stack-yaml=frontend/stack.yaml -v build
@(System/Process/Log.hs:37:3)
2018-04-24 12:56:42.909494: [debug] Process finished in 248ms: /usr/local/bin/docker create --net=host -e STACK_IN_CONTAINER=1 -e STACK_ROOT=/Users/christiankjaerlaustsen/.stack -e STACK_PLATFORM_VARIANT=dkb61b2dc4e76119fbba7cceb60d5ffa49 -e HOME=/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home -e PATH=/opt/host/bin:/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home/.local/bin:/root/.cabal/bin:/root/.local/bin:/opt/ghc/8.2.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -e PWD=/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack -v /Users/christiankjaerlaustsen:/Users/christiankjaerlaustsen -v /Users/christiankjaerlaustsen/.stack:/Users/christiankjaerlaustsen/.stack -v /Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend:/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend -v /Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home:/Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home -w /Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack -e USER=christiankjaerlaustsen -e SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.D8v3WjTyAg/Listeners -v /private/tmp/com.apple.launchd.D8v3WjTyAg/Listeners:/private/tmp/com.apple.launchd.D8v3WjTyAg/Listeners -v /Users/christiankjaerlaustsen/.stack/programs/x86_64-linux/stack-1.6.3/stack:/opt/host/bin/stack -t -i tehnix/ghcjs-docker:lts-9.21 /opt/host/bin/stack --internal-re-exec-version=1.6.3 --internal-docker-entrypoint "DockerEntrypoint {deUser = Just (DockerUser {duUid = 501, duGid = 20, duGroups = [20,12,61,79,80,81,98,702,33,100,204,250,395,398,399,701], duUmask = 18})}" --stack-yaml=frontend/stack.yaml -v build
@(System/Process/Log.hs:44:3)
2018-04-24 12:56:42.910090: [debug] Creating process: /usr/local/bin/docker start -a -i 791fe386a759de5b23f7bf62a2cca15bdfa540287528024ec9931c4c69b4d913
@(System/Process/Log.hs:22:3)
Version 1.6.3, Git revision b27e629b8c4ce369e3b8273f04db193b060000db (5454 commits) x86_64 hpack-0.20.0
2018-04-24 10:56:48.844354: [debug] Loading project config file frontend/stack.yaml
@(Stack/Config.hs:868:13)
2018-04-24 10:56:48.856002: [debug] Run process: /usr/sbin/groupadd -o --gid 20 stack
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:48.887487: [debug] Process finished in 31ms: /usr/sbin/groupadd -o --gid 20 stack
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:48.890291: [debug] Run process: /usr/sbin/useradd -oN --uid 501 --gid 20 --home /Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home stack
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:48.929204: [debug] Process finished in 38ms: /usr/sbin/useradd -oN --uid 501 --gid 20 --home /Users/christiankjaerlaustsen/GitHub/Tehnix/miso-isomorphic-stack/frontend/.stack-work/docker/_home stack
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:48.929360: [debug] Run process: /usr/sbin/groupadd -o --gid 20 group20
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:48.938691: [debug] Process finished in 9ms: /usr/sbin/groupadd -o --gid 20 group20
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:48.938807: [debug] Run process: /usr/sbin/groupadd -o --gid 12 group12
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:48.952149: [debug] Process finished in 13ms: /usr/sbin/groupadd -o --gid 12 group12
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:48.952316: [debug] Run process: /usr/sbin/groupadd -o --gid 61 group61
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:48.977534: [debug] Process finished in 25ms: /usr/sbin/groupadd -o --gid 61 group61
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:48.977670: [debug] Run process: /usr/sbin/groupadd -o --gid 79 group79
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:48.991099: [debug] Process finished in 13ms: /usr/sbin/groupadd -o --gid 79 group79
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:48.991271: [debug] Run process: /usr/sbin/groupadd -o --gid 80 group80
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.006803: [debug] Process finished in 14ms: /usr/sbin/groupadd -o --gid 80 group80
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.006984: [debug] Run process: /usr/sbin/groupadd -o --gid 81 group81
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.020884: [debug] Process finished in 13ms: /usr/sbin/groupadd -o --gid 81 group81
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.021037: [debug] Run process: /usr/sbin/groupadd -o --gid 98 group98
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.030441: [debug] Process finished in 9ms: /usr/sbin/groupadd -o --gid 98 group98
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.030551: [debug] Run process: /usr/sbin/groupadd -o --gid 702 group702
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.040424: [debug] Process finished in 9ms: /usr/sbin/groupadd -o --gid 702 group702
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.040532: [debug] Run process: /usr/sbin/groupadd -o --gid 33 group33
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.051412: [debug] Process finished in 10ms: /usr/sbin/groupadd -o --gid 33 group33
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.051632: [debug] Run process: /usr/sbin/groupadd -o --gid 100 group100
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.061282: [debug] Process finished in 8ms: /usr/sbin/groupadd -o --gid 100 group100
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.061803: [debug] Run process: /usr/sbin/groupadd -o --gid 204 group204
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.074834: [debug] Process finished in 12ms: /usr/sbin/groupadd -o --gid 204 group204
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.075014: [debug] Run process: /usr/sbin/groupadd -o --gid 250 group250
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.085177: [debug] Process finished in 9ms: /usr/sbin/groupadd -o --gid 250 group250
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.085324: [debug] Run process: /usr/sbin/groupadd -o --gid 395 group395
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.093166: [debug] Process finished in 7ms: /usr/sbin/groupadd -o --gid 395 group395
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.093303: [debug] Run process: /usr/sbin/groupadd -o --gid 398 group398
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.101006: [debug] Process finished in 7ms: /usr/sbin/groupadd -o --gid 398 group398
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.101161: [debug] Run process: /usr/sbin/groupadd -o --gid 399 group399
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.109153: [debug] Process finished in 7ms: /usr/sbin/groupadd -o --gid 399 group399
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.109306: [debug] Run process: /usr/sbin/groupadd -o --gid 701 group701
@(System/Process/Log.hs:37:3)
2018-04-24 10:56:49.117319: [debug] Process finished in 7ms: /usr/sbin/groupadd -o --gid 701 group701
@(System/Process/Log.hs:44:3)
2018-04-24 10:56:49.119055: [debug] Decoding build plan from: /Users/christiankjaerlaustsen/.stack/build-plan/lts-9.21.yaml
@(Stack/Snapshot.hs:150:5)
2018-04-24 10:56:49.119212: [debug] Trying to decode /Users/christiankjaerlaustsen/.stack/build-plan-cache/lts-9.21.cache
@(Data/Store/VersionTagged.hs:66:5)
2018-04-24 10:56:49.132586: [debug] Success decoding /Users/christiankjaerlaustsen/.stack/build-plan-cache/lts-9.21.cache
@(Data/Store/VersionTagged.hs:70:13)
2018-04-24 10:56:49.133008: [debug] Getting system compiler version
@(Stack/Setup.hs:387:17)
No information found for ghcjs-0.2.1.9009021_ghc-8.0.2.
Supported versions for OS key 'source': GhcjsVersion 0.1.0.20150924 7.10.2
2018-04-24 12:56:46.033052: [debug] Run process: /usr/local/bin/docker rm -f 791fe386a759de5b23f7bf62a2cca15bdfa540287528024ec9931c4c69b4d913
@(System/Process/Log.hs:37:3)
2018-04-24 12:56:46.109114: [debug] Process finished in 75ms: /usr/local/bin/docker rm -f 791fe386a759de5b23f7bf62a2cca15bdfa540287528024ec9931c4c69b4d913
@(System/Process/Log.hs:44:3)
后退一步
我想,如果我们回到基础,我真正要问的是,堆栈在哪里/如何在 docker 映像中找到 GHC,以及如何指定 GHCJS 的路径?
因此,目前,制作此映像的 Dockerfile 相当简单。举个例子为 lts-9.21 构建 GHCJS,
FROM fpco/stack-build:lts-11.5
# Install node.js for GHCJS.
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash - \
&& apt-get update \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
# Set up GHCJS.
COPY src /tmp/setup-ghcjs
RUN cd /tmp/setup-ghcjs \
&& stack setup --system-ghc \
&& rm -rf /tmp/setup-ghcjs
RUN mkdir -p /src
VOLUME /src
WORKDIR /src
这是做什么的
- 使用
fpco/stack-build:lts-11.5堆栈作为基础层,因为它包含cabal、stack等。 - 然后它会安装 node.js,因为这是 GHCJS 所需要的
- 最后,它使用包含 stack.yaml 的项目构建 GHCJS,这看起来与我的问题顶部的那个完全一样,当然去掉了 docker/system-ghc 部分。
现在,我想象会发生的是堆栈的 docker 支持会在使用图像时选择这个 ghcjs-0.2.1.9009021_ghc-8.0.2 编译器,但这似乎没有发生。图像本身适用于例如docker run -v $(pwd):/src -it tehnix/ghcjs-docker:lts-9.21 stack build.
换句话说:如何使 GHCJS 安装的编译器可被发现以支持堆栈的 docker?
【问题讨论】:
标签: docker haskell haskell-stack