gcloud docker 无法在 Compute Engine VM 上运行

gcloud docker not working on Compute Engine VM

我正在尝试将 docker 图像从 Container Engine 获取到 Compute Engine VM 上的 运行。在我的笔记本电脑上,我可以 运行 gcloud docker pull gcr.io/projectid/image-tag

我刚刚在 Compute Engine 上启动了一个 Debian VM,但是当我尝试 运行 任何 gcloud docker 命令时,我得到 ERROR: (gcloud.docker) Docker is not installed.

> gcloud --version
Google Cloud SDK 140.0.0
alpha 2017.01.17
beta 2017.01.17
bq 2.0.24
bq-nix 2.0.24
core 2017.01.17
core-nix 2017.01.17
gcloud 
gsutil 4.22
gsutil-nix 4.22

> gcloud docker --version
ERROR: (gcloud.docker) Docker is not installed.

https://cloud.google.com/sdk/gcloud/reference/docker 看起来 gcloud docker 应该有效。

我是否应该在 运行 宁 gcloud docker 之前在 VM 上安装 docker?

Am I supposed to install docker on the VM before running gcloud docker?

是的。错误消息告诉您 Docker 需要安装在计算机上才能使 gcloud docker 工作。

您可以在 Debian VM 上手动安装 docker,也可以在计算机上启动具有 docker pre-installed 的 VM,例如 Container-Optimized OS from Google

根据直觉,我尝试用 sudo apt-get install docker 安装 docker,但我错了,实际的 docker 包名称是 docker.io,所以我重新启动了该过程并以这种方式工作:

  1. 安装 docker 软件包:

sudo apt-get install docker.io

  1. 测试 docker 是否正常工作

sudo gcloud docker ps

  1. 从图像存储库中拉取您的图像,例如gcr.io。如果没有 一个特定的标签使用 最新的 一个。

sudo gcloud docker -- pull gcr.io/$PROJECT_NAME/$APPLICATION_IMAGE_NAME:latest

  1. 运行 你的形象。请记住正确指定端口映射,第一个端口是将在 GCE 实例中暴露的端口,第二个端口是 docker 容器内部暴露的端口,例如 EXPOSE 8000。例如,在下面的示例中,我的应用程序配置为在 8000 端口上工作,但它将被默认 www 端口上的 public 访问,即 80.

sudo docker run -d -p 80:8000 --name=$APPLICATION_IMAGE_NAME \ --restart=always gcr.io/$PROJECT_NAME/$APPLICATION_IMAGE_NAME:latest

--restart 标志将允许此容器在每次实例重新启动时重新启动

希望对你有用。