我对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>
答案 0 :(得分:1)
docker build
的最后一个arg,通常类似于docker build .
,是docker中的构建上下文。此目录将发送到运行构建的服务器,并使用此上下文执行所有COPY
和ADD
命令。这些命令不在客户端上运行,而docker是客户端/服务器应用程序,因此在构建映像时不存在任何不在该上下文中的任何命令。
所以在上面的示例中,docker build .
当前目录是构建上下文,如果在.settings
目录中运行时,只有那些文件是构建上下文的一部分。因此,您的build.sh
脚本需要传递不同的目录,并且还引用Dockerfile
在该构建上下文中的位置。那看起来像是:
docker build -f .settings/Dockerfile ..
执行此操作时,所有COPY
和ADD
命令现在都与父目录相关,因此您可能需要调整Dockerfile
进行补偿。
对于$(pwd)
引用,您可以在运行cd ..
命令之前docker run
或更新命令,如下所示:
docker run \
-u root \
--rm \
-v $(pwd)/..:/app \
<your image>