为什么 Google Compute Engine 没有运行我的容器?

cil*_*hex 5 google-compute-engine google-cloud-platform

我可以成功地做到这一点:

  • 将我的应用程序捆绑到一个 docker 镜像中
  • 推送到 master 时,使用 Google Cloud Build 将此映像构建到容器中
    • (此容器存储在注册表中,例如,gcr.io/my-project/my-container
  • 使用 Google Cloud Run 将此容器部署到网络
  • 访问 Cloud Run 网址并查看我的网站

我现在正在尝试更复杂的构建,我认为下一步是使用 Google Compute Engine。

首先,我只是尝试部署我部署到 Cloud Run 的同一应用程序的单个实例:

  • 导航 Compute Engine > VM Instances
  • 输入实例名称等基本信息
  • 在“Container Image”下输入我的容器位置: gcr.io/my-project/my-container
    • (顺便说一句,我怀疑该界面没有为您现有的 Container Registry 项目提供选择器。)
  • 选择“允许 HTTP 流量”和“允许 HTTPS 流量”
  • 点击“创建”

GCE 创建它需要一分钟,然后它会显示绿色复选标记和实例名称,以及“外部 IP:35.238.xxx.xxx”。我在浏览器中访问该 URL 并得到...“35.238.xxx.xxx 拒绝连接。”

为了进行检查,我返回 GCE 页面并选择我的实例旁边的“SSH > 在浏览器窗口中打开”,这会向机器打开一种云终端。

在此终端窗口中,键入ps并查看没有进程正在运行。容器Dockerfile以 结尾CMD yarn start:prod,所以我想这不会发生在这里。

此外,我ls在这里和那里四处导航,发现/appDockerfileWORKDIR /app命令中没有目录。似乎不仅我的应用程序没有启动,而且容器没有复制到 VM 实例?

我究竟做错了什么?

Ser*_*oza 1

我决定遵循在新的虚拟机实例上部署容器

\n\n

请在下面找到我的步骤和命令:

\n\n
    \n
  1. gcr.io/cloud-marketplace/google/nginx1:latest创建一个新的VM来运行带有网络标签的Docker镜像 http-server

    \n\n
    $ gcloud compute instances create-with-container instance-3 --tags=http-server,https-server --container-image=gcr.io/cloud-marketplace/google/nginx1:latest\nCreated [https://www.googleapis.com/compute/v1/projects/test-prj/zones/europe-west3-a/instances/instance-3].\nNAME        ZONE            MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS\ninstance-3  europe-west3-a  n1-standard-1               10.156.0.30  35.XXX.111.XXX  RUNNING\n
    Run Code Online (Sandbox Code Playgroud)
  2. \n
  3. 创造新的防火墙规则:

    \n\n
    $ gcloud compute firewall-rules create default-allow-http --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server\nCreating firewall...\xe2\xa0\xb9\nCreated [https://www.googleapis.com/compute/v1/projects/test-prj/global/firewalls/default-allow-http].                   \nCreating firewall...done.                                                                                                                            \nNAME                NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED\ndefault-allow-http  default  INGRESS    1000      tcp:80        False\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
  5. 检查当前的防火墙规则:

    \n\n
    $ nmap -Pn 35.XXX.111.XXX\nStarting Nmap 7.70 ( https://nmap.org ) at 2020-04-02 12:04 CEST\nPORT   STATE SERVICE\n...\n80/tcp open  http\n
    Run Code Online (Sandbox Code Playgroud)
  6. \n
  7. 检查 NGINX 是否正在容器中运行:

    \n\n
    $ curl -I http://35.XXX.111.XXX\nHTTP/1.1 200 OK\nServer: nginx/1.16.1\n...\n\n$ curl http://35.XXX.111.XXX \n...\n<h1>Welcome to nginx!</h1>\n... \n
    Run Code Online (Sandbox Code Playgroud)
  8. \n
\n\n

也可通过网络浏览器访问http://35.XXX.111.XXX

\n\n
    \n
  1. 检查容器的状态:

    \n\n
    $ gcloud compute ssh instance-3\n...\ninstance-3 ~ $ docker ps\nCONTAINER ID        IMAGE                                                                COMMAND                  CREATED             STATUS              PORTS               NAMES\n...\na657c8871239        gcr.io/cloud-marketplace/google/nginx1:latest                        "/usr/local/bin/dock\xe2\x80\xa6"   14 minutes ago      Up 14 minutes                           klt-instance-3-uwtu\n
    Run Code Online (Sandbox Code Playgroud)
  2. \n
  3. 连接到容器并运行curl http://35.XXX.111.XXX在单独的终端中运行:

    \n\n
    instance-3 ~ $ docker attach a657c8871239\nYY.YY.43.203 - - [02/Apr/2020:10:18:06 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.0" "-"\nYY.YY.43.203 - - [02/Apr/2020:10:18:07 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.0" "-"\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
\n\n

我在遵循文档时没有发现错误。

\n\n

解决您的问题

\n\n
    \n
  1. 将您的步骤和命令与我的进行比较。
  2. \n
  3. 通过以下文档运行测试 Docker 镜像项目
  4. \n
  5. 尝试复制文档中的步骤自定义映像
  6. \n
\n\n

如果您仍然遇到问题 - 使用您的所有步骤、命令和输出更新您的问题。

\n