使用Docker启动和停止App Engine实例

Jud*_*orn 6 google-app-engine docker

我使用Docker(在OSX上)在本地设置了一个App Engine项目,并且使用通常的"gcloud preview app run app.yaml"命令运行服务器.据我所知,这一直在不断创造新的图像.经过一个小时左右的工作后,我最终得到了30个docker图像,每个图像需要130MB.

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

好像我没有正确使用Docker/gcloud.任何人都知道我可能做错了什么?除了命中命令C并再次运行"run"命令之外,还有另一种方法我应该重新启动App Engine实例吗?

更新:仔细观察后,我注意到当我在本地运行应用程序并创建容器时,我收到此消息:"http:Hijack与使用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
Run Code Online (Sandbox Code Playgroud)

小智 6

Docker 1.6.x [ 参考 ] 存在一个持续存在的问题,导致无法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设置; 有一个很好的指南这里
  2. 按照此处的说明重新安装Boot2Docker/Docker .重要提示:在完成"安装Boot2Docker"步骤之后和"启动Boot2Docker应用程序"之前,您必须立即停止.到达那里后,打开终端并执行以下命令:
$ mkdir ~/.boot2docker 
$ echo 'ISOURL="https://github.com/boot2docker/boot2docker/releases/download/v1.5.0/boot2docker.iso"' > ~/.boot2docker/profile
Run Code Online (Sandbox Code Playgroud)

此时,您可以继续"启动Boot2Docker应用程序"部分并完成安装.您现在应该拥有一个有效的Docker启动板来启动托管虚拟机.通过发出以下内容来仔细检查您是否安装了正确的版本会很高兴:

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

输出应如下所示:

Client version: 1.5.0 Server version: 1.5.0

现在您可以再次尝试原始命令:

$ gcloud preview app run app.yaml