我对bash/shell脚本世界非常陌生,我正在尝试下面的操作,它可能非常简单,但我无法理解命令,如果有人能在这里帮助我,并向我介绍一些文档wrt到shell脚本主题,那就太好了。提前谢谢你。
我的build.sh和Dockerfile位于一个名为.settings的文件夹下,该文件夹直接位于应用程序根目录下。现在,在我的build.sh和Dockerfile中,当我引用$(pwd)或COPY之类的内容时。/ app /它可能无法工作,因为我的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>发布于 2017-07-03 14:38:43
docker build的最后一个arg (通常类似于docker build . )是docker中的构建上下文。此目录被发送到运行构建的服务器,并使用此上下文执行所有COPY和ADD命令。这些命令不运行在客户端上,而docker是一个客户机/服务器应用程序,因此在该上下文中不存在的任何内容只是为了构建映像而不存在。
因此,在上面的示例中,docker build .当前目录是构建上下文,如果在.settings目录中运行该目录,那么只有这些文件是构建上下文的一部分。因此,您的build.sh脚本需要传递一个不同的目录,还需要引用Dockerfile在该构建上下文中的位置。看起来是这样的:
docker build -f .settings/Dockerfile ..当您这样做时,所有的COPY和ADD命令现在都将与父目录相关,因此您可能需要调整您的Dockerfile以进行补偿。
对于您的$(pwd)参考,您可以在运行docker run命令之前使用cd ..,也可以更新命令如下:
docker run \
-u root \
--rm \
-v $(pwd)/..:/app \
<your image>https://stackoverflow.com/questions/44888079
复制相似问题