Docker&Angular 2:绑定目录保持空白

我必须在MEAN堆栈应用程序上工作,完全停靠。 所以我们有三个图像:

  • 一个用于mongo数据库
  • 一个用于后端(nodejs)
  • 还有一个用于前端(angular度2)

因为我想在容器运行时在前端工作,所以我试图将一个文件夹绑定到容器中的src文件夹。

为此,我使用以下命令运行容器:

docker run --name frontend -d -p 5555:5555 --link backend -v /home/frontend:/code/src/ infra-frontend:latest 

Docker创build目录,但它仍然是空的,尽pipe在容器中不是空的(我用docker exec bash命令检查过)。

所以,因为这是我第一次和Docker打交道,所以我有点迷路了,我想得到一些帮助。

注意:这个问题可以通过创buildDocker卷来解决,前面的问题中已经存在数据 ,但是由于用户在理解这可能意味着什么时遇到了一些困难,所以我在下面添加了详细信息。

当docker装入卷时,它遵循unix文件系统的挂载规则。 这意味着这些文件在安装时不会显示出来。 您可以在这里的Docker的Github问题中阅读更多关于这方面的内容。

我看到它的方式有两个选项:

  1. 阅读“仅限数据的容器”并使用它(可能更好地查看Docker卷)
  2. 使用ENTRYPOINTCMD指定一个脚本,该脚本将在启动容器时将源/code/src/下载到/code/src/
  3. 始终将源代码保存在主机上,并从docker镜像指向它(例如/ home / frontend < – 有数据,空dir – > / code / src /)
  4. 将源/code/src下载到/code/src但公开volume /mycode/ 。 然后使用类似rsync的同步/code/src//mycode之间的变化

每个选项都有不同的难度。 目前最简单的可能是#2或#3。 数据专用容器的概念是我相信由Docker 1.10 ish替代的docker volume

以前的@jrbeverly的解释可能是正确的,但不是很容易理解,也不涉及到docker文档。

以下是Docker文档的简单解释:

“创build容器时会初始化卷,如果容器的基本映像包含指定安装点上的数据,则在初始化卷时将现有数据复制到新卷中( 注意,在安装主机目录时,这不适用 )。 “

来源: https : //docs.docker.com/engine/tutorials/dockervolumes/

所以你可以创build一个命名卷(-v前端:/ code / src),如果你需要/ code / src内容在卷初始化时被复制到卷上。 您的卷不会在/ home / frontend中,而是在/ var / lib / docker / volumes / frontend / _data中。