Docker 从Meteor Up部署的Meteor应用程序访问主机服务器上的文件
我有一个Meteor应用程序,部署在UbuntuMeteor上。 从这个应用程序中,我需要读取位于主机服务器上应用程序容器外部的文件 我该怎么做 我尝试在mup.js中设置卷,但没有成功。似乎我缺少如何正确提供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
/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
让我解释一下:
因为Meteor UP使用sudo启动容器。见:sudo
我们想启动一个容器docker run
-访问容器(将其视为SSH'ing进入容器)的方法
完成后自动清理-移除容器--rm
-这里我们给出了您定义的卷(我这里以您提供的两个目录为例)-v
-带有一些有用工具的图像busybox
-用于启动容器的应用程序/bin/sh
docker exec -it my-mup-container /bin/sh
您可以将此命令想象为SSH’ing到正在运行的容器中。现在,您可以检查它是否真的不存在,容器中的凭据是否正确,等等
最后,我不得不同意@mikkel的观点,即挂载本地目录不是一个好的选择,但现在您可以开始研究如何使用docker volume
挂载远程目录。他提到AWS的S3
,我在Azure上使用过AzureFiles
,有很多可能性