【问题标题】:Starting and stopping App Engine instances with Docker使用 Docker 启动和停止 App Engine 实例
【发布时间】:2015-05-04 06:00:13
【问题描述】:

我已经使用 Docker(在 OSX 上)在本地设置了一个 App Engine 项目,并且一直在使用通常的“gcloud preview app run app.yaml”命令运行服务器。据我所知,这会一遍又一遍地创建新图像。经过一个小时左右的工作,我最终得到了 30 个 docker 镜像,每个镜像占用 130MB。

最终我被告知我不能再绑定到 localhost:8080。我尝试杀死所有容器和图像,但在重新启动之前仍然无法使用 localhost:8080。

似乎我没有正确使用 Docker/gcloud。任何人都知道我可能做错了什么?除了点击命令 C 并再次运行“运行”命令之外,我还有其他方法可以重新启动 App Engine 实例吗?

更新:仔细观察后,我注意到当我在本地运行应用程序并创建容器时收到此消息:“http:劫持与使用 CloseNotifier 不兼容”。我对 Docker 不够熟悉,无法理解这里发生了什么。所有搜索似乎都指向我没有使用的 Go。

更新 2:这是跟踪:

Creating container...
INFO     2015-05-05 02:23:28,293 containers.py:560] Container 1564ce4344957114312d6d1dc696ffbb4176b40ace6dcff5e4239e13ee04a8f6 created.
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/Users/judeosborn/google-cloud-sdk/platform/google_appengine/google/appengine/tools/docker/containers.py", line 643, in _ListenToLogs
    for line in log_lines:
  File "/Users/judeosborn/google-cloud-sdk/./lib/docker/docker/client.py", line 225, in _multiplexed_response_stream_helper
    socket = self._get_raw_response_socket(response)
  File "/Users/judeosborn/google-cloud-sdk/./lib/docker/docker/client.py", line 167, in _get_raw_response_socket
    self._raise_for_status(response)
  File "/Users/judeosborn/google-cloud-sdk/./lib/docker/docker/client.py", line 119, in _raise_for_status
    raise errors.APIError(e, response, explanation=explanation)
APIError: 500 Server Error: Internal Server Error ("http: Hijack is incompatible with use of CloseNotifier")

INFO     2015-05-05 02:23:28,606 module.py:1745] New instance for module "default" serving on:
http://localhost:8080

【问题讨论】:

  • 我相信这是两个不同的问题——docker 镜像在本地保留了很长时间,而当你退出时,端口在某些循环下保持绑定。对于第二个,如果您执行“ps”,您是否看到一个正在运行“dev_appserver.py”的进程?如果是这样,如果您手动终止该进程会发生什么?另外,仔细检查一下——你的意思是“control-C”退出吗?
  • 您对两个不同的问题可能是对的,尽管我猜它们是相关的。我可以杀死进程。而且,是的,我的意思是 control-C。
  • 当您遇到端口绑定问题时,如果您执行 ps,您是否看到仍在运行?我相信你可以寻找'dev_appserver'。
  • 是的,我绝对可以杀死进程。这不是问题。不过,我正在尝试找出问题的根源,所以我不必继续这样做。

标签: google-app-engine docker


【解决方案1】:

Docker 1.6.x [reference] 存在一个持续存在的问题,导致 gcloud 无法与托管虚拟机(您似乎正在使用)很好地配合使用。在它得到修复之前,最简单的解决方法是将开发机器中的 Docker 降级到 1.5.0 版本,这是已知可以工作的最新版本。

对于 Ubuntu,您可以执行以下操作:

$ curl -sSL https://get.docker.com/ubuntu | sed 's/lxc-docker/lxc-docker-1.5.0/' | sudo sh

不过,对于其他 Linux 发行版,您可能需要修改 sed 模式。


另一方面,如果您在 Mac OS X 下使用 Boot2Docker,请按照以下步骤操作:

  1. 完全卸载之前的 Boot2Docker/Docker 设置;有一个很好的指南here
  2. 按照说明 here 重新安装 Boot2Docker/Docker。 重要提示:您必须在完成“安装 Boot2Docker”步骤后和“启动 Boot2Docker 应用程序”之前立即停止。到达那里后,打开终端并执行以下命令:
$ mkdir ~/.boot2docker 
$ echo 'ISOURL="https://github.com/boot2docker/boot2docker/releases/download/v1.5.0/boot2docker.iso"' > ~/.boot2docker/profile

此时,您可以继续“启动 Boot2Docker 应用程序”部分并完成安装。您现在应该有一个有效的 Docker 启动板来启动托管 VM。最好通过发出以下命令仔细检查您是否安装了正确的版本:

$ boot2docker ssh docker version | egrep "(Client|Server) version"

输出应该是这样的:

Client version: 1.5.0 Server version: 1.5.0

现在您可以再试一次原来的命令:

$ gcloud preview app run app.yaml

【讨论】:

  • 非常有帮助。谢谢你让我知道。至少我知道这不是我做错的事情。
  • 确实很有帮助。但是我通过在 github 页面上选择“Tags”然后选择 1.5.0 安装程序来安装 1.5.0。
  • 我经历了两次建议的过程,但它对我不起作用。我最终只是从github.com/boot2docker/boot2docker/releases/tag/v1.5.0 下载了 boot2docker.iso,并且 boot2docker 停止了,我将 iso 复制到 ~/.boot2docker/ 和 /usr/local/share/boot2docker/,启动了 boot2docker,boot2docker ssh docker 版本等等很好。 1.6.2 boot2docker w/ Docker 1.5(一切正常——这是 Mac 版本)
  • @LesVogel-GoogleDevRel 到底有什么不适合您?确实,我们的目标是让 Docker 1.5 在 boot2docker 的虚拟机中运行。 boot2docker 本身可以是 1.6.2,因为这并不重要
  • 所以@LesVogel-GoogleDevRel 是 1.5.0 还是我们应该使用的 Docker 版本?我似乎在本地启动我们运行的托管 VM 时遇到了同样的问题,我们正在尝试在其中运行 Grails 应用程序。
【解决方案2】:

尝试运行: $ ps uax | egrep "gcloud|appserver" 如果你看到有任何东西在运行,kill it...你甚至可能需要kill -9 it。

【讨论】:

  • 正如我上面评论的那样,我可以很好地终止进程。那不是问题。我试图弄清楚为什么它一直在发生。几乎每次我取消开发服务器时都会发生这种情况。
  • 我建议你在这里提交错误报告:link
猜你喜欢
  • 2013-07-22
  • 2019-11-25
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2019-08-03
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多