$(pwd) - 上一级

时间:2017-07-03 14:25:49

标签: linux bash shell docker

我对bash / shell脚本世界很陌生,我正在努力做下面的事情,它可能很简单,但我无法弄清楚命令,如果有人可以帮助我会很棒在这里,并指出我的一些文档wrt to shell脚本主题。提前谢谢。

我的build.sh和Dockerfile位于名为.settings的文件夹下,该文件夹直接位于app根目录下。现在在我的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>

1 个答案:

答案 0 :(得分:1)

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

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

docker build -f .settings/Dockerfile ..

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

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

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