Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 从Meteor Up部署的Meteor应用程序访问主机服务器上的文件_Docker_Meteor_Meteor Up - Fatal编程技术网

Docker 从Meteor Up部署的Meteor应用程序访问主机服务器上的文件

Docker 从Meteor Up部署的Meteor应用程序访问主机服务器上的文件,docker,meteor,meteor-up,Docker,Meteor,Meteor Up,我有一个Meteor应用程序,部署在UbuntuMeteor上。 从这个应用程序中,我需要读取位于主机服务器上应用程序容器外部的文件 我该怎么做 我尝试在mup.js中设置卷,但没有成功。似乎我缺少如何正确提供/host/path和/container/path volumes: { // passed as '-v /host/path:/container/path' to the docker run command '/host/path': '/containe

我有一个Meteor应用程序,部署在UbuntuMeteor上。 从这个应用程序中,我需要读取位于主机服务器上应用程序容器外部的文件

我该怎么做

我尝试在mup.js中设置卷,但没有成功。似乎我缺少如何正确提供
/host/path
/container/path

volumes: {
      // passed as '-v /host/path:/container/path' to the docker run command
      '/host/path': '/container/path',
      '/second/host/path': '/second/container/path'
    },
阅读Docker安装卷的文档,但显然无法理解

假设文件位于
/home/dirname/filename.csv

如何将其正确安装到应用程序中,以便能够从应用程序访问它


或者有其他可能访问它?

欢迎使用堆栈溢出。让我提出另一种思考这个问题的方式

在可扩展集群中,docker实例可以随着应用程序负载的变化而上下旋转。它们可能在同一台主机上,也可能不在同一台主机上,因此在主机的文件系统上建立依赖关系不是一个好主意

您最好考虑使用S3这样的文件存储机制,它可以自行扩展,而磁盘存储限制不适用

另一个选项是确定文件是否可以存储在数据库中


我希望这会有帮助,让我们设法缩小问题的范围

Meteor UP正在将配置参数
volumes
直接传递给docker,正如您在评论中提到的那样。因此,直接对docker进行测试可能更容易——尽可能缩小涉及的组件范围:

sudo docker run \
  -it \
  --rm \
  -v "/host/path:/container/path" \
  -v "/second/host/path:/second/container/path" \
  busybox \
  /bin/sh
让我解释一下:

  • sudo
    因为Meteor UP使用sudo启动容器。见:
  • docker run
    我们想启动一个容器
  • -访问容器(将其视为SSH'ing进入容器)的方法
  • --rm
    完成后自动清理-移除容器
  • -v
    -这里我们给出了您定义的卷(我这里以您提供的两个目录为例)
  • busybox
    -带有一些有用工具的图像
  • /bin/sh
    -用于启动容器的应用程序
我希望你也不能访问这里的文件。在这种情况下,深入了解为什么不能在Docker中访问文件夹

如果可以,这听起来很奇怪,您可以启动容器并通过运行以下命令尝试访问容器:

docker exec -it my-mup-container /bin/sh
您可以将此命令想象为SSH’ing到正在运行的容器中。现在,您可以检查它是否真的不存在,容器中的凭据是否正确,等等

最后,我不得不同意@mikkel的观点,即挂载本地目录不是一个好的选择,但现在您可以开始研究如何使用
docker volume
挂载远程目录。他提到AWS的
S3
,我在Azure上使用过
AzureFiles
,有很多可能性