我正在做的是在 Dockerfile 中的 RUN 命令中设置 sbcl 和 Quicklisp,然后使用 CMD 加载我的自定义代码。
当我在本地计算机上使用 Docker 运行它时,一切都很好,但是当我将其推送到“google run”时,lisp 代码(使用 CMD 加载)崩溃,因为它找不到 Quicklisp。
据我所知,这是因为 RUN (/root) 和 CMD (/home) 的 HOME 不同。
RUN 和 CMD 中是同一个用户 = uid=0(root) gid=0(root) groups=0(root)
我假设他们(谷歌运行)使用一些 linux 命令来更改用户的“用户上下文”(不知道用于 linux 的正确单词),但不知道他们为什么或如何这样做。因为我不知道他们这样做是什么或为什么,所以很难通过谷歌搜索解决方案。
欢迎大家提出意见。
要查看行为:
Dockerfile:
FROM phusion/baseimage
MAINTAINER Piet Pompies <piet@pompies.com>
RUN echo $HOME
CMD echo $HOME
Run Code Online (Sandbox Code Playgroud)
当您构建 $HOME 时,它将是 /root;当您部署并运行时,它将是 /home
编辑:我找到了解决方法(2020 年 6 月 12 日):
不确定我是否应该将解决方法放在答案中,或者只是像我在这里所做的那样进行编辑。将其保留在编辑中,直到另有通知为止。
解决方法:
您可以在 RUN 命令中转储核心并在 CMD 中使用它或使用 buildapp 来运行 lisp。buildapp 是您在最终版本中想要的。
完整的 woo 和 …