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

时间:2015-05-04 06:00:14

标签: google-app-engine docker

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

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

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

更新:仔细观察后,我注意到当我在本地运行应用程序并创建容器时收到此消息:" 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

2 个答案:

答案 0 :(得分:6)

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应用程序"。到达那里后,打开终端并执行以下命令:
  3. $ mkdir ~/.boot2docker 
    $ echo 'ISOURL="https://github.com/boot2docker/boot2docker/releases/download/v1.5.0/boot2docker.iso"' > ~/.boot2docker/profile
    

    此时,您可以继续"启动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

答案 1 :(得分:1)

尝试运行: $ ps uax | egrep "gcloud|appserver" 如果您看到任何正在运行的内容,kill它......您甚至可能需要kill -9