将 docker 容器中的文件公开给主机
expose files from docker container to host
我有一个 docker 容器,其中包含一个 Django 应用程序。生成静态文件并将其复制到静态文件夹中。
容器文件夹层次结构:
- var
- django
- app
- static
在构建 docker 图像之前,我 运行 ./manage.py collectstatic
因此静态文件位于 /var/django/static
文件夹中。为了公开应用程序并提供静态文件,我在主机上安装了一个 nginx。问题是,如果我在静态文件夹和主机上的指定文件夹之间做一个卷,当我 运行 docker 容器时,容器中的 /var/django/static
文件夹被删除(好吧,不是删除而是挂载)。有什么办法可以克服这个问题吗?与设置音量一样,但告诉 docker 也获取当前文件?
卷在 Docker 中被视为挂载,这意味着主机目录将始终挂载在容器的目录之上。换句话说,Docker 卷目前无法实现您要执行的操作。
查看此 Github 问题以了解有关此主题的讨论:https://github.com/docker/docker/issues/4361
一种可能的解决方法是将 docker 卷放入容器中的空目录,然后在 Docker 运行 命令(或启动脚本)中), 将静态内容复制到作为卷安装的空目录中。
另一个不错的解决方案:
1.安装SSHd
2.在主机上安装SSHFS
3. 通过 SSHFS
将 docker 容器内的文件夹挂载到外部(主机)
Volumes have several advantages over bind mounts:
New volumes can have their content pre-populated by a container.
以nginx默认的网页文件夹为例:
$ docker volume create xmpl
$ docker run -v xmpl:/usr/share/nginx/html nginx
将通过以下方式生成 host 系统上的所有文件:
$ 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
我有一个 docker 容器,其中包含一个 Django 应用程序。生成静态文件并将其复制到静态文件夹中。
容器文件夹层次结构:
- var
- django
- app
- static
在构建 docker 图像之前,我 运行 ./manage.py collectstatic
因此静态文件位于 /var/django/static
文件夹中。为了公开应用程序并提供静态文件,我在主机上安装了一个 nginx。问题是,如果我在静态文件夹和主机上的指定文件夹之间做一个卷,当我 运行 docker 容器时,容器中的 /var/django/static
文件夹被删除(好吧,不是删除而是挂载)。有什么办法可以克服这个问题吗?与设置音量一样,但告诉 docker 也获取当前文件?
卷在 Docker 中被视为挂载,这意味着主机目录将始终挂载在容器的目录之上。换句话说,Docker 卷目前无法实现您要执行的操作。
查看此 Github 问题以了解有关此主题的讨论:https://github.com/docker/docker/issues/4361
一种可能的解决方法是将 docker 卷放入容器中的空目录,然后在 Docker 运行 命令(或启动脚本)中), 将静态内容复制到作为卷安装的空目录中。
另一个不错的解决方案: 1.安装SSHd 2.在主机上安装SSHFS 3. 通过 SSHFS
将 docker 容器内的文件夹挂载到外部(主机)Volumes have several advantages over bind mounts:
New volumes can have their content pre-populated by a container.
以nginx默认的网页文件夹为例:
$ docker volume create xmpl
$ docker run -v xmpl:/usr/share/nginx/html nginx
将通过以下方式生成 host 系统上的所有文件:
$ 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