【发布时间】: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'。
-
是的,我绝对可以杀死进程。这不是问题。不过,我正在尝试找出问题的根源,所以我不必继续这样做。