【发布时间】:2021-04-16 19:05:31
【问题描述】:
我使用的是 Ubuntu 映像(Ubuntu 20.04)。本质上,我正在尝试永久修改我的 PATH 以便每次启动容器时我都不必手动编辑 PATH 来查找我安装的新项目。但是,无论我做什么,我都无法使更改永久化。我已经在图像中花费了相当长的时间,所以我非常想找到一个解决方案,这样我就不必重建整个东西了。
这是shell信息
#ps -p $$
PID TTY TIME CMD
9 pts/1 00:00:00 sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# PATH=$PATH:/kraken
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/kraken
#. ~/.profile
现在当我重新启动容器时:
#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
基本上,PATH 没有保存。我浏览了很多博客和堆栈,但找不到任何能坚持的东西。任何帮助将不胜感激。
【问题讨论】:
-
你不能基于ubuntu创建你自己的镜像,但是使用预期的路径吗?如果我理解正确,您更改了容器内的路径并希望保持此状态。我认为用正确的路径启动容器会更容易。
-
@Fabien 感谢您的回复。我不相信这会奏效。 kraken 目录不是原始图像的一部分。它是我安装新软件的路径,所以如果不先创建目录就无法创建 PATH
-
然后需要在镜像定义中(在DockerFile中)创建目录。您会在 Internet 上找到很多资源,这些资源将解释如何编写 DockerFile。但这个想法是,一旦你的容器运行,一切都应该处于所需的状态。这样您就可以并行启动多个容器,所有容器都具有所需的状态。
-
@Fabien 是否可以使用已构建的图像编辑 docker 文件。您根本无法永久添加 PATH 变量,这似乎有点愚蠢。
-
这个想法是容器是短暂的。您可以同时运行多个基于同一映像的容器。想象一下,您在每个容器中定义了不同的路径值,然后启动另一个容器,使用哪个路径值?您可以将 DockerFile 基于现有图像,例如 Ubuntu 的图像,并添加命令以创建 kraken 目录 (mkdir),复制此目录中所需的内容,然后使用 env 命令将其添加到您的路径中。但如果您的问题是从正在运行的容器生成 DockerFile,我不这么认为。
标签: docker path ubuntu-20.04