共享卷不一致可见

时间:2020-03-28 21:51:38

标签: docker

我有一个已创建的Dockerfile,我想以本地目录作为共享卷来启动它。我已经标记了图像foo

运行时,我可以列出本地控制器中存在的目录test/的内容:

docker run -it -v $(pwd)/.:/usr/local/src/spark foo /bin/bash -c "ls test"

# functions as expected, lists files in test/ directory

但是,当我将上述命令放入Makefile中时,不会得到相同的结果。相反,当我运行$ make foo时,会发出以下消息:

docker run -it -v /.:/usr/local/src/spark foo /bin/bash -c "ls test"
ls: cannot access test: No such file or directory

make foo命令中共享本地目录时,就像直接在行中调用make一样,关于如何使docker像预期那样“看到”测试目录的任何建议吗? / p>

1 个答案:

答案 0 :(得分:2)

如果您有制定规则

container-ls:
        docker run -it -v $(pwd)/.:/usr/local/src/spark foo ls test

Make看到$(pwd)并将其解释为Make变量或Make内部函数。您可以通过以下两种方法来解决此问题:

  • 使用双美元符号将其逸出$$(pwd)
  • 使用反引号,Make不会将其解释为特殊的“ pwd”
  • 使用GNU Make realpath函数获取规范路径$(realpath .)