我必须处理MEAN堆栈应用程序,完全是dockerised。 所以我们有三张图片:
由于我想在容器运行时在前面工作,我试图将文件夹绑定到容器中的src文件夹。
为此,我使用以下命令运行容器:
docker run --name frontend -d -p 5555:5555 --link backend -v /home/frontend:/code/src/ infra-frontend:latest
Docker创建目录,但它保持空,尽管它在容器中不为空(我使用 docker exec bash 命令检查)。
所以,因为这是我第一次与Docker打交道,我有点失落,我想帮忙。
答案 0 :(得分:3)
注意:Create Docker volume with preexisting data in it上一个问题回答了这个问题,但由于用户在理解这可能意味着什么方面有些困难,我在下面添加了详细信息。
当docker挂载卷时,它遵循unix文件系统的mount规则。这意味着挂载时不会显示这些文件。您实际上可以在Docker here的Github问题中阅读更多相关信息。
我认为你有两种选择:
ENTRYPOINT
或CMD
指定在启动容器时将源代码下载到/code/src/
的脚本。/code/src
,但会公开卷/mycode/
。然后使用rsync /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中。