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

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

最终我被告知我不能再绑定到localhost:8080。 我试图杀死所有的容器和图像,但仍然不能使用本地主机:8080,直到我重新启动。

好像我没有正确使用Docker / gcloud。 任何人有一个想法,我可能做错了什么? 除了点击命令C并再次运行“运行”命令之外,还有另外一种方法可以重新启动App Engine实例吗?

更新:仔细看后,我注意到当我在本地运行一个应用程序,并创build一个容器时,我得到这个消息:“http:Hijack与CloseNotifier的使用不兼容”。 对于Docker来说,我并不熟悉这里发生了什么。 所有的search似乎指向去,我不使用。

更新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 1.6.x [ 参考 ]有一个持续的问题,阻止gcloud与托pipe虚拟机一起工作(就像您使用的那样)。 最简单的解决方法是将开发机器中的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应用程序”之前,您必须立即停止。 一旦你到达那里,打开一个terminal并执行以下命令:
 $ mkdir ~/.boot2docker $ echo 'ISOURL="https://github.com/boot2docker/boot2docker/releases/download/v1.5.0/boot2docker.iso"' > ~/.boot2docker/profile 

此时,您可以继续“启动Boot2Docker应用程序”部分并完成安装。 您现在应该有一个有效的Docker启动板,用来启动托pipe虚拟机。 这将是很好,仔细检查,你有正确的版本安装发出:

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

输出应该如下所示:

Client version: 1.5.0 Server version: 1.5.0

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

$ gcloud preview app run app.yaml

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