【问题标题】:$(pwd) - one level up$(pwd) - 上一级
【发布时间】:2017-07-03 14:25:49
【问题描述】:

我对 bash/shell 脚本世界很陌生,我正在尝试执行以下操作,它可能非常简单,但我无法弄清楚命令,如果有人可以帮助我,那就太好了在这里,还向我指出一些关于 shell 脚本主题的文档。提前谢谢你。

我的 build.sh 和 Dockerfile 位于名为 .settings 的文件夹下,该文件夹直接位于应用根目录下。现在,当我引用 $(pwd) 或 COPY 之类的内容时,在我的 build.sh 和 Dockerfile 中。 /apps/ 它可能不起作用,因为我的 build.sh 和 Dockerfile 不直接位于应用根目录下。

在我上面引用的文件中,我可以在这种情况下使用什么命令。希望我说清楚了。再一次,这可能非常简单,因为我是这个领域的新手,我觉得有点困难。

inside build.sh, reference to $(pwd)

docker run \
-u root \
--rm \
-v $(pwd):/app \ ----> this $(pwd) references the application root, but if I 
move this build.sh inside a folder called .settings then the $(pwd) context 
would change and I still want to refer it to the root.
<MYIMAGE NAME FROM LOCAL REPO>

【问题讨论】:

  • 我不确定我是否完全理解您的问题,但 echo "${PWD%/*}" 是否给您想要的?如果您位于文件系统的根目录,它将无法工作:)
  • 所以我只是想实现以下目标,在上面的示例中,$(PWD) 将记录 /app/.settings 并且我想从此上下文更改对 root 的引用跨度>

标签: linux bash shell docker


【解决方案1】:

docker build 的最后一个参数,通常类似于docker build .,是 docker 中的构建上下文。这个目录被发送到运行构建的服务器,所有COPYADD 命令都使用这个上下文执行。这些命令不在客户端上运行,并且 docker 是一个客户端/服务器应用程序,因此任何不在该上下文中的内容根本不存在用于构建映像。

所以在上面的例子中,docker build . 当前目录是构建上下文,如果在 .settings 目录中运行它,那么只有这些文件是构建上下文的一部分。因此,您的 build.sh 脚​​本需要传递不同的目录,并且还需要引用 Dockerfile 在该构建上下文中的位置。看起来像:

docker build -f .settings/Dockerfile ..

执行此操作时,所有COPYADD 命令现在都与父目录相关,因此您可能需要调整Dockerfile 以进行补偿。


对于您的$(pwd) 参考,您可以在运行docker run 命令之前cd .. 或将命令更新为如下所示:

docker run \
  -u root \
  --rm \
  -v $(pwd)/..:/app \
  <your image>

【讨论】:

  • 谢谢。我得到了您的参考,我在 build.sh 和 Dockerfile 中确实有某些参考,假设它们位于根目录下,因为这两个文件将位于 .settings 文件夹下,我如何更改那些使用 $(PWD )?,例如现在 $(PWD) 控制台输出 /app/.settings/ 我会撒谎改变它对 /app 的引用(考虑到根是 /app)
  • COPYADD 是相对于构建上下文的,并且在树的上方看不到任何东西。要将 .settings 目录中的文件复制到映像中,只需 COPY .settings/X /image/dir/X
  • 得到你,最后一个查询,在这种情况下,我如何更改对 $(PWD) 的引用,正如我之前提到的,我确实很少有与 $(PWD) 相关的引用,并且自构建以来。 sh 从根目录移动到 .settings 文件夹,$(PWD) 引用会改变,我希望该引用向上一级并引用根目录
  • 我确定我理解您的评论。您可能应该在问题中包含相关脚本。
  • 当然,我已添加到我原来的查询中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2021-10-21
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多