【问题标题】:Additional steps in DockerfileDockerfile 中的其他步骤
【发布时间】:2016-09-21 08:57:34
【问题描述】:

我有一个 Docker 映像,它是 Haskell 的 Web IDE(Jupyter notebook)的服务器。

每次我想允许在 IDE 中使用库时,我都必须转到 Dockerfile 并将安装命令添加到其中,然后重建映像。

这样做的另一个缺点,我必须在 Github 上 fork 原始图像,不允许我为它做出贡献。

我正在考虑编写另一个 Dockerfile,它使用 FROM 指令提取基础文件,然后使用 RUNs 命令来安装库。但是,由于它们位于不同的层,来宾系统找不到 Haskell 包管理器命令。

TL;DR:我想从 Dockerfile 运行 stack install <library>(堆栈类似于 npm 或 pip,但用于 Haskell),但我不想拥有基础映像的分支。

我该如何解决这个问题?

【问题讨论】:

  • 您使用的是哪个基础镜像?你想做的很好,但听起来基础镜像没有安装stack(或安装它并稍后将其删除),所以你需要在你的Dockerfile中安装stack
  • 我正在使用 gibiansky/ihaskell。我检查了 dockerfile 并明确安装了它。在运行和执行堆栈时,我也 ssh 进入它,没有问题@EltonStoneman
  • 是的,它在图像中。您想在 Dockerfile 中运行的 stack 命令是什么?
  • stack install Frames 就是一个例子

标签: docker jupyter ihaskell


【解决方案1】:

我正在考虑编写另一个 Dockerfile,它使用 FROM 指令提取基础文件,然后运行命令来安装库。但是,由于它们位于不同的层,来宾系统找不到 Haskell 包管理器命令。

这确实是正确的方法,它应该可以工作。我不确定我是否理解这里的“层”问题 - RUN 执行的命令应该在一个中间容器中运行,该容器包含基础映像中的所有层和之前的 RUN 命令。 (忽略multi-stage builds的可能性,但这些是在17.05中添加的,并且在发布此问题时不存在。)

我能看到stack 可能在正在运行的容器中工作但不能在 Dockerfile RUN 命令中工作的唯一情况是,如果此时未正确设置 $PATH 变量。检查此变量,并确保 RUN 以正确的用户身份运行?

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2018-06-20
    相关资源
    最近更新 更多