`gsutil cp` 从存储到计算实例 运行 容器不复制文件

`gsutil cp` from Storage to compute instance running container doesn't copy files

我是 运行 一个带有 coreos 容器的 Google 计算实例(图像名称:coreos-stable-1688-4-0-v20180327)。使用 gsutil 将文件从存储复制到本地文件系统似乎工作正常——除了 none 本应复制的文件实际上出现在文件系统上。 运行 在不使用容器的情况下在计算实例上执行相同的复制命令确实有效,所以我想问题出在容器上。但是,我不确定容器导致复制失败的原因。

命令是gsutil cp -r gs://my-bucket ./.

您遇到了 https://github.com/GoogleCloudPlatform/gsutil/issues/453 中描述的问题。为容器中的 gsutil 设置了一个别名 运行s gsutil(它无权访问主机文件系统),因此文件被复制到该容器的文件系统,而不是您的 GCE 主机的.该线程中建议了一些解决方法。


编辑以便更好地阅读 (来自 GitHub 问题线程的信息):

看起来 GCE VM 为 gsutil 设置了 nifty 别名:

$ type gsutil
gsutil is aliased to `(docker images google/cloud-sdk || docker pull google/cloud-sdk) > /dev/null;docker run -t -i --net=host -v /home/<USER>/.config:/root/.config google/cloud-sdk gsutil'

CoreOS 实例上的潜在解决方法

  • 克隆 gsutil repo, run git checkout <tag> to fetch the commit for the most recent release, install Python via these instructions,然后确保 运行 gsutil 的本地副本直接在 CoreOS 主机上,而不是 运行 安装 gsutil 的容器化版本。
  • 覆盖 gsutil 别名,或创建一个新别名,以便将主机文件系统的某些部分挂载到容器上;这允许您在容器终止后访问 newly-written 文件。