将文件从docker容器暴露给宿主

时间:2016-08-14 09:19:22

标签: docker docker-volume

我有一个装有django应用程序的docker容器。生成静态文件并将其复制到静态文件夹。
容器文件夹层次结构:

- var
    - django
        - app
        - static

在构建docker镜像之前,我运行./manage.py collectstatic,因此静态文件位于/var/django/static文件夹中。要公开应用程序并提供静态文件,我在主机上有一个nginx。问题是,如果我在静态文件夹和主机上的指定文件夹之间执行卷,当我运行docker容器时,容器中的/var/django/static文件夹将被删除(好,不删除但已挂载)。有没有办法克服这个问题?如设置音量但告诉泊坞号也采用当前文件?

3 个答案:

答案 0 :(得分:4)

在Docker中将卷视为挂载,这意味着主机目录将始终挂载在容器的目录中。换句话说,您目前无法使用Docker卷进行尝试。

有关此主题的讨论,请参阅此Github问题:https://github.com/docker/docker/issues/4361

一种可能的解决方法是将docker卷放到容器中的空目录中,然后在Docker RUN命令(或启动脚本)中,将静态内容复制到挂载为的空目录中一卷。

答案 1 :(得分:2)

另一个不错的解决方案:  1.安装SSHd  2.在主机上安装SSHFS  3.通过SSHFS将docker容器内的文件夹挂载到外部(主机)

答案 2 :(得分:0)

阅读来自:Dockers Volume Page

  

与绑定安装相比,卷具有几个优点:

     

新卷可以通过容器预先填充其内容。


Similar example using docker-compose

以nginx的默认网页文件夹为例:

$ docker volume create xmpl
$ docker run -v xmpl:/usr/share/nginx/html nginx

将通过以下方式产生主机系统上的所有文件:

$ docker inspect xmpl
...
"Mountpoint": "/var/lib/docker/volumes/xmpl/_data"

然后您可以在主机上查看文件:

# ls /var/lib/docker/volumes/xmpl/_data                               
  50x.html  index.html

最后在 / var / nginx / static 中使用它:

# mkdir -p /var/nginx
# ln -s /var/lib/docker/volumes/xmpl/_data /var/nginx/static
# ls /var/nginx/static
  50x.html  index.html