使用gcsfuse挂载的Bucket中的数据在Google Cloud Instance上运行Docker

问题描述 投票:2回答:2

我正在尝试运行Docker容器来分析Google Cloud Bucket中的数据。

我已经能够使用gcsfuse成功安装Bucket,我测试了我可以做一些事情,比如在Bucket中创建和删除文件。

为了能够安装其他程序(并安装存储桶),我安装了Docker(并没有使用Docker优化的实例选项)。如果我以交互模式运行Docker(没有安装驱动器),它看起来好像正常。

但是,如果我尝试使用已安装的驱动器(这是挂载gcsfuse的Bucket)以交互模式运行Docker,我会收到一条错误消息:

user@instance:~/bucket-name/subfolder$ docker run -it -v /home/user/bucket-name:/mnt/bucket-name gcr.io/deepvariant-docker/deepvariant
docker: Error response from daemon: error while creating mount source path '/home/user/bucket-name': mkdir /home/user/bucket-name: file exists.

我希望我接近这个工作:有没有人对这个错误消息的相对简单的修复有任何想法?

顺便说一句,我意识到还有其他方法可以在Google Cloud上运行DeepVariant,但我正在努力使事情与我在AWS上做的事情尽可能相似(另外,我可能需要做一些额外的故障排除来分析其中一个我的文件)。

非常感谢您的帮助!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

仅供参考,这就是我安装水桶的方式:

#mount directory: https://github.com/GoogleCloudPlatform/gcsfuse/blob/master/docs/installing.md
export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install gcsfuse

#restart and mount directory: https://cloud.google.com/storage/docs/gcs-fuse
#NOTE: please make sure you are in your home directory (I encounter issues if I try to mount from /mnt)
mkdir [bucket-name]
gcsfuse --file-mode 777 --dir-mode 777 [bucket-name] ./[bucket-name]

这就是我安装Docker的方式:

#install Docker for Debian: https://docs.docker.com/install/linux/docker-ce/debian/
sudo apt-get update
sudo apt-get -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get -y --allow-unauthenticated install docker-ce docker-ce-cli containerd.io

#fix Docker sock issue: https://stackoverflow.com/questions/47854463/got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-uni
sudo usermod -a -G docker [user]
#have to restart after this
docker google-cloud-platform mount gcsfuse
2个回答
0
投票

我想我至少找到了解决问题的部分方法:

正如this tutorial中提到的,你还需要运行gcloud auth configure-docker

我发现您还需要退出并重新启动您的实例,但这严格解决了此帖子的原始错误消息。

我想有一个奇怪的消息,但也许更多的是关于特定的容器。所以,我又跑了另一个测试:

docker run -it -v /home/user/bucket-name:/mnt/bucket-name cwarden45/dnaseq-dependencies

这一次,我收到了关于实例上存储空间的错误消息(为了能够下载并运行Docker容器)。所以,我回去创建了一个带有更大本地硬盘的新实例:

1)在Google云端控制台中,我选择了“计算实例”和“VM实例”

2)我点击了“创建实例”(类似于之前)

3)我在“启动盘”下选择“更改”

4)我将大小设置为300 GB而不是10 GB(目前,在“尺寸(GB)”下向右下方)

与之前类似,我为“机器类型”选择了8个vCPU,我在“身份和API访问”下选择了“允许对所有云API的完全访问”,并且我选中了“允许HTTP流量”和“允许HTTPS流量”的复选框“(在”防火墙“下)。

我没有选择“将容器映像部署到此VM实例”,我相信我是如何使用“sudo”安装Docker以便能够安装gcsfuse的。

我还必须将其称为“部分”解决方案,因为这允许我在交互模式下成功运行Docker容器,但挂载的存储桶在Docker中显示为空。

对于另一个项目,我注意到如果我将它们安装在/ opt下的本地硬盘驱动器上,可执行文件可以工作,但如果我尝试将它们安装在我的存储桶上则不行(为了每次都节省这些程序的安装时间)。在AWS上,我认为我需要使用EFS存储而不是S3存储来做类似的事情,但我会继续学习如何使用Google Cloud Bucket进行安装存储/分析。


0
投票

此外,这是一个不同的问题,但我注意到我可以修复从桶中运行exectuable文件的问题,从gcsfuse [bucket-name] ./[bucket-name]更改命令到gcsfuse --file-mode 777 --dir-mode 777 [bucket-name] ./[bucket-name](我相应地更改了示例代码)

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