Docker 运行 -v 将文件挂载为目录

Docker run -v mounting a file as a directory

我正在尝试使用 -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 流程的一部分,脚本正在 运行 in Docker-in-Docker 在另一个容器中。

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

我在 中对此进行了更详细的解释:

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