2016-10-25 31 views
6

ile Docker Konteynerinde python kodunu uzaktan ayıklama Bu soru için yeni kayıt oldum. VS Code'lu Docker Container'daki uzak hata ayıklama python kodunun mümkün olup olmadığı ile ilgili. Burada tamamen yapılandırılmış Docker Konteyneri sahibiyim. Bununla ilgili biraz yardım aldım ve yine de docker için oldukça yeni. İçinde Odoo v10 çalışır. Ancak VS kodunda çalışmak için uzaktan ayıklama yapamıyorum. this açıklamasını denedim, ama gerçekten anlamadım. Bu mümkün mü? Ve eğer evetse, onu nasıl çalıştırabilirim? VS Code 1.6.1 ile Kubuntu 16.04 ve Don Jayamanne'den Python Extension ile çalışıyorum. Ah evet ve umarım bu soruyla doğru yerdeyim ve hiçbir kurallara aykırı değil. VS Code

GÜNCELLEME:

Sadece Elton Stoneman yolunu denedik.

There was an error in starting the debug server. 
Error = {"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect", 
     "address":"172.21.0.4","port":3000} 

Benim Dockerfile şuna benzer: Bu daha önce Pydev (Eclipse) ile çalışmak için tasarlanmıştır çünkü benim Dockerfile içinde

FROM **cut_out** 
USER root 
# debug/dev settings 

RUN pip install \ 
     watchdog 

COPY workspace/pysrc /pysrc 
RUN apt-get update \ 
&& apt-get install -y --no-install-recommends \ 
     build-essential \ 
     python-dev \ 
&& /usr/bin/python /pysrc/setup_cython.py build_ext --inplace \ 
&& rm -rf /var/lib/apt/lists/* 

EXPOSE 3000 

USER odoo 

pysrc orada Bununla beraber bu hatayı alıyorum.

Bu benim kullandığım run command geçerli:

docker-compose run -d -p 3000:3000 odoo 

Ve bu benim launch.json önemli bir parçasıdır:

{ 
     "name": "Attach (Remote Debug)", 
     "type": "python", 
     "request": "attach", 
     "localRoot": "${workspaceRoot}", 
     "remoteRoot": "${workspaceRoot}", 
     "port": 3000, 
     "secret": "my_secret", 
     "host": "172.21.0.4" 
    } 

Sanırım şimdilik bu kadar bilgi umut.

GÜNCELLEME 2:

Tamam çözüm bulundu. Docker'ın nasıl çalıştığını ve yanlış çalıştığını tamamen yanlış anladım. Zaten bir Docker-compose yapılandırılmış bir tamamlayıcı vardı. Yapmam gereken her şey, VS Kodu yapılandırmalarını docker-compose.yml'e uyarlamaktı. Bu sadece launch.json'ı 8069 portuna (varsayılan Odoo portu) değiştirmem ve sadece docker-compose up'u kullanmam gerekti, daha sonra VS Kodunda hata ayıklama işlemi yapmak zorunda kaldım. Ne yazık ki ptvsd kullanımı Odoo ortamımı yok ediyor, ama en azından şimdi hata ayıklayabiliyorum. Teşekkürler!

+0

Güncelleme 2'nizi 'launch.json'unuza ne yazdığınızla günceller misiniz? Ayrıca 'docker-compose up' kullandığınızı söylediğinizde ne demek istediğinizden emin değilsiniz. İş akışınızın bir açıklaması takdir edilecektir :) – allthethings

+0

Maalesef benim lansmanım yok.json' artık bu proje için, ama tüm değişti içinde "port": 8069' için liman oldu. 'docker-compose', docker işlevini genişleten bir araçtır. “docker-compose up” sadece bulunan tüm docker konteynerlerini başlatır. Hala amaçlandığı gibi çalışmadığını söylemek zorundayım, VS Code'da tbh çalışmak için uzaktan hata ayıklama docker'ı olmadı. Eğer işe alırsanız lütfen bana söyleyin :). – Brotbret

cevap

4

Evet, bu mümkündür - Python uygulaması Docker kabında çalışırken, bunu uzak bir makine gibi ele alabilirsiniz. senin Docker görüntüde

, sen gibi bir şey, (Dockerfile örn EXPOSE 3000) uzaktan hata ayıklama bağlantı noktası kullanılabilir hale getirmek için ihtiyaç Python uygulamasında ptvsd kurulum dahil ediyorsa ve konteyner çalıştırdığınızda sonra port yayınlayacağız :

docker run -d -p 3000:3000 my-image 

Sonra çalışan kabın IP adresini almak için docker inspect kullanmak, ve sizin fırlatma dosyasında host için kullanmak budur.

+0

Çok teşekkür ederim, bu bana çok yardımcı oldu! Ama bir şey daha: Ben sahip olduğum her '.py' betiği' ptvsd' almalı mıyım? Çünkü Odoo ile çok şey olurdu. Proje başına bir ithalat gibi daha iyi bir yol var mı? – Brotbret

+0

Sadece denemek için zamanım vardı, maalesef çalışmıyor. Hata ayıklamaya çalıştığımda her zaman hata ayıklama konsolunda bu hatayı alıyorum: – Brotbret

+0

Üzgünüz, sadece StackOverflow'a alışıyorum. Bu hata: 'Hata ayıklama sunucusunu başlatırken bir hata oluştu. Hata = {"code": "ECONNREFUSED", "errno": "ECONNREFUSED", "syscall": "connect", "address": "172.21.0.4", "port": 3000} Başlangıçta bir hata oluştu. hata ayıklama sunucusu. Hata = {"code": "ECONNREFUSED", "errno": "ECONNREFUSED", "syscall": "connect", "address": "172.21.0.4", "port": 3000} ' (Aynı şeyi elde ederim iki kez çıktı) Herhangi bir Fikir belki? – Brotbret

İlgili konular