1

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

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

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

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

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

我该如何解决这个问题?

4

1 回答 1

0

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

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

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

于 2019-03-11T17:25:42.040 回答