我有一个Docker镜像,它是Haskell的Web IDE(Jupyter笔记本)的服务器。
每次我想允许在IDE中使用库时,我必须转到Dockerfile并将install命令添加到其中,然后重建图像。
另一个缺点是,我必须在Github上分割原始图像,不允许我为它做贡献。
我正在考虑编写另一个Dockerfile,它使用FROM
指令拉出基本文件,然后RUN
安装库的命令。但是,由于它们位于不同的层中,因此guest虚拟机系统找不到Haskell包管理器命令。
TL; DR:我想从Dockerfile运行stack install <library>
(堆栈类似于npm或pip,但对于Haskell),但我不想拥有基本映像的分支。
我怎么能解决这个问题?
答案 0 :(得分:0)
我正在考虑编写另一个Dockerfile,该文件使用FROM指令提取基本文件,然后运行命令以安装库。但是,由于它们位于单独的层中,因此来宾系统找不到Haskell软件包管理器命令。
这确实是执行此操作的正确方法,并且应该起作用。我不确定我是否理解“层”问题-由RUN执行的命令应该在中间容器中运行,该容器包含基础映像和先前RUN命令的所有层。 (忽略multi-stage builds的可能性,但是这些问题已在17.05中添加,并且在发布此问题时不存在。)
我唯一能看到stack
在运行中的容器中起作用但在Dockerfile RUN命令中不起作用的情况是,如果此时$ PATH变量设置不正确。检查此变量,并确保RUN以正确的用户身份运行?