2015-05-04 13 views
6

Skonfigurowałem projekt App Engine lokalnie przy użyciu Docker (w systemie OSX) i uruchomiłem serwer przy użyciu zwykłej komendy "gcloud preview app run app.yaml". Z tego co wiem, ciągle tworzy nowe obrazy. Po około godzinie pracy kończę z około 30 obrazami dokerów, z których każdy pobiera 130 MB.Uruchamianie i zatrzymywanie instancji App Engine przy użyciu Dockera

W końcu powiedziano mi, że nie mogę już powiązać z localhost: 8080. Próbowałem zabić wszystkie pojemniki i obrazy, ale nadal nie mogę używać localhost: 8080, dopóki nie uruchomię się ponownie.

Wygląda na to, że nie używam poprawnie Docker/gcloud. Czy ktoś ma pojęcie, co robię źle? Czy jest inny sposób, w jaki powinienem zrestartować instancje App Engine inne niż naciśnięcie polecenia C i ponowne uruchomienie komendy "uruchom"?

AKTUALIZACJA: Po dokładniejszym przyjrzeniu się zauważyłem, że otrzymuję tę wiadomość, gdy uruchomię aplikację lokalnie i utworzy się kontener: "http: Hijack nie jest zgodny z używaniem CloseNotifier". Nie znam Dockera, żeby zrozumieć, co tu się dzieje. Wszystkie wyszukiwania wydają się wskazywać Przejdź, którego nie używam.

UPDATE 2: Oto ślad:

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

Uważam, że są to dwa osobne zagadnienia - doker ima ges zachowane lokalnie przez długi czas, a port pozostaje związany pod pewnymi okręgami, gdy rezygnujesz. Po drugie, jeśli robisz "ps", czy widzisz proces z uruchomionym "dev_appserver.py"? Jeśli tak, co się stanie, jeśli ręcznie zabijesz ten proces? Ponadto, aby dwukrotnie sprawdzić - czy masz na myśli "control-C", aby rzucić? –

+0

Prawdopodobnie masz rację w dwóch osobnych kwestiach, ale domyślam się, że są powiązane. Mogę zabić ten proces. I tak, mam na myśli kontrolę C. –

+0

Gdy pojawi się problem z łączeniem portów, jeśli robisz ps, czy nadal widzisz, że coś działa? Wierzę, że możesz szukać "dev_appserver". –

Odpowiedz

6

Istnieje stały problem z Docker 1.6.x [reference], który uniemożliwia gcloud dobrze współpracować z zarządzanymi maszynami wirtualnymi (tak jak się wydaje). Najłatwiejszym rozwiązaniem, dopóki nie zostanie naprawione, jest obniżenie wersji Dockera w maszynie programistycznej do wersji 1.5.0, która jest najnowszą wersją, o której wiadomo, że działa.

dla Ubuntu można zrobić coś takiego:

$ curl -sSL https://get.docker.com/ubuntu | sed 's/lxc-docker/lxc-docker-1.5.0/' | sudo sh

Dla innych dystrybucji Linuksa, może trzeba zmodyfikować że sed wzór, choć.


Z drugiej strony, jeśli używasz Boot2Docker pod Mac OS X, wykonaj następujące kroki:

  1. pełni odinstalować poprzednią Boot2Docker/ustawienie Docker; jest niezły przewodnik here
  2. Zainstaluj ponownie Boot2Docker/Docker zgodnie z instrukcjami here. WAŻNE: MUSISZ zatrzymać się zaraz po wykonaniu kroku "Zainstaluj Boot2Docker" i przed "Uruchomieniem aplikacji Boot2Docker". Gdy już tam, otwórz terminal i wykonaj następujące polecenia:
$ mkdir ~/.boot2docker 
$ echo 'ISOURL="https://github.com/boot2docker/boot2docker/releases/download/v1.5.0/boot2docker.iso"' > ~/.boot2docker/profile 

W tym momencie można przystąpić do sekcji „Uruchom Boot2Docker aplikacji” i zakończyć instalację. Powinieneś już mieć poprawny starter Docker, za pomocą którego uruchomisz zarządzane maszyny wirtualne.Byłoby miło, aby dokładnie sprawdzić, że masz odpowiednie wersje zainstalowanych wydając:

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

Wyjście powinno wyglądać tak:

Client version: 1.5.0 Server version: 1.5.0

Teraz można spróbować oryginalnego polecenia :

$ gcloud preview app run app.yaml

+0

Bardzo pomocne. Dzięki, że dałeś mi znać. Przynajmniej wiem, że to nie jest coś, co robię źle. –

+0

Rzeczywiście bardzo pomocne. Zainstalowałem jednak 1.5.0 wybierając "Tagi" na stronie github, a następnie wybierając instalator 1.5.0. –

+1

Przeszedłem przez proces sugerowany dwa razy i nie zadziałało to dla mnie. Skończyłem właśnie pobieranie boot2docker.iso z https://github.com/boot2docker/boot2docker/releases/tag/v1.5.0 i przy zatrzymanym boot2docker, skopiowałem iso do ~/.boot2docker/i/usr/local/share/boot2docker /, uruchomił boot2docker, bootshocker ssh docker i wszystko było w porządku. 1.6.2 boot2docker w/Docker 1.5 (wszystko działało - to jest dla wersji na komputery Mac) –

1

spróbuj uruchomić: $ ps uax | egrep "gcloud|appserver" Jeśli widzisz coś działa, kill go ... może nawet trzeba kill -9 to.

+0

Jak pisałem powyżej, mogę całkowicie zabijać procesy. To nie problem. Próbuję zrozumieć, dlaczego tak się dzieje. Zdarza się prawie za każdym razem, gdy anuluję program. –

+0

Proponuję złożyć zgłoszenie błędu tutaj: [link] (https://code.google.com/p/googleappengine/issues/list) –