我已经使用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
答案 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,请按照以下步骤操作:
$ 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
。