$(pwd) – 一级

我是bash / shell脚本世界的新手,我正在尝试做下面的工作,这可能很简单,但我无法弄清楚命令,如果有人能够帮助我,也指向我的一些文档关于shell脚本主题。 先谢谢你。

我的build.sh和Dockerfile驻留在名为.settings的文件夹下,并且该文件夹直接位于应用程序根目录下。 现在在我的build.sh和Dockerfile中,当我引用像$(pwd)或COPY的东西。 / 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> 

docker build的最后一个参数,通常是像docker build . 是docker中的构build上下文。 这个目录被发送到构build运行的服务器,所有的COPYADD命令都使用这个上下文来执行。 这些命令不能在客户端上运行,docker是一个客户端/服务器应用程序,所以任何不在这个上下文中的东西根本就不存在用于构build映像的目的。

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

 docker build -f .settings/Dockerfile .. 

当你这样做的时候,所有的COPYADD命令现在都与父目录相关,所以你可能需要调整你的Dockerfile来补偿。


对于$(pwd)引用,可以在运行docker run命令之前cd ..或更新命令如下所示:

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