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

时间:2017-02-17 20:35:40

标签: angular docker mean-stack docker-volume

我必须处理MEAN堆栈应用程序,完全是dockerised。 所以我们有三张图片:

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

由于我想在容器运行时在前面工作,我试图将文件夹绑定到容器中的src文件夹。

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

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

Docker创建目录,但它保持空,尽管它在容器中不为空(我使用 docker exec bash 命令检查)。

所以,因为这是我第一次与Docker打交道,我有点失落,我想帮忙。

2 个答案:

答案 0 :(得分:3)

注意:Create Docker volume with preexisting data in it上一个问题回答了这个问题,但由于用户在理解这可能意味着什么方面有些困难,我在下面添加了详细信息。

当docker挂载卷时,它遵循unix文件系统的mount规则。这意味着挂载时不会显示这些文件。您实际上可以在Docker here的Github问题中阅读更多相关信息。

我认为你有两种选择:

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

    每个选项都有不同程度的难度。到目前为止最简单的可能是#2或#3。由于Docker 1.10 ish?

    ,我认为仅数据容器的概念被docker volume取代

答案 1 :(得分:2)

来自@jrbeverly的先前解释可能是正确的,但不是那么容易理解,与docker文档无关。

以下是Docker文档中的简单说明:

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

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

因此,如果需要在卷初始化时将/ code / src内容复制到卷中,则可以创建命名卷(-v frontend:/ code / src)。您的音量不会在/ home / frontend中,但在/ var / lib / docker / volumes / frontend / _data中。