【问题标题】:Docker run -v mounting a file as a directorydocker run -v 将文件挂载为目录
【发布时间】:2018-03-25 00:33:09
【问题描述】:

我正在尝试使用 -v 标志将包含某些凭据的文件的目录挂载到容器上,但不是将该文件挂载为文件,而是将其挂载为目录:

运行脚本:

$ mkdir creds/
$ cp key.json creds/key.json
$ ls -l creds/
total 4
-rw-r--r-- 1 root root 2340 Oct 12 22:59 key.json
$ docker run -v /*pathToWorkingDirectory*/creds:/creds *myContainer* *myScript*

当我查看docker run 命令的调试信息时,我看到它创建了/creds/ 目录,但由于某种原因,它创建了key.json 作为其下的子目录,而不是复制文件。

我看到其他一些帖子说,如果你告诉docker run 挂载一个它找不到的文件,它会在容器上创建一个带有文件名的目录,但是由于我没有指定文件名和它知道将新目录命名为“key.json”,它似乎能够找到该文件,但还是将其创建为目录?有没有人遇到过这种情况?

如果相关,作为 GitLab 的 CI 流程的一部分,该脚本正在另一个容器中的 Docker-in-Docker 中运行。

【问题讨论】:

  • 你的平台是什么?什么是 docker 版本?

标签: docker gitlab gitlab-ci docker-in-docker


【解决方案1】:

您正在运行 Docker-in-Docker,这意味着当您指定 -v 卷时,Docker 将在 host 上查找此目录,因为共享 sock 启用了 Docker-in-Docker 实际上意味着您的运行命令在运行器容器旁边启动一个容器。

我在this SO answer 中更详细地解释了这一点:

https://stackoverflow.com/a/46441426/2078207

另请注意此答案下方的评论,以获得解决方案的方向。

【讨论】:

  • 感谢您的解释!我无法让它像那样工作,但很高兴知道。我最终设法通过 --build-args 传递凭据字符串来解决它。
猜你喜欢
  • 1970-01-01
  • 2019-07-20
  • 2016-03-12
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 2019-05-18
  • 1970-01-01
相关资源
最近更新 更多