从部署有Meteor Up的Meteor App访问主机服务器上的文件。

问题描述 投票:0回答:1

我有一个Meteor App部署在Ubuntu上,我需要从这个App中读取一个位于主机服务器上App容器之外的文件。

我如何才能做到这一点?

我已经尝试在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.

如何正确地将它挂载到App中,以便能够从App中访问它?

或者也许有其他的可能性来访问它?

docker meteor meteor-up
1个回答
0
投票

欢迎来到Stack Overflow。让我提出另一种思考方式......。

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

你可能会更好地考虑使用S3等文件存储机制,它将自行扩展,磁盘存储限制将不适用。

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

希望能帮到你


0
投票

让我们试着缩小问题的范围。

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

让我来解释一下。

我希望你也不能访问这里的文件。在这种情况下,深挖一下为什么你不能在Docker中访问一个文件夹。

如果你可以,这在我听来很奇怪,你可以启动容器,并尝试通过运行以下命令进入容器。

docker exec -it my-mup-container /bin/sh

你可以认为这个命令就像SSH'ing进入一个正在运行的容器。现在你可以检查一下它是否真的不在那里,容器里面的凭证是否正确等等。

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

© www.soinside.com 2019 - 2024. All rights reserved.